Sle*_*vin 16 spring spring-security spring-boot
Spring Security 已将 AccessDecisionManager 和 AccessDecisionVoter 这两个类替换为 AuthorizationManager。很不错。不幸的是,Spring Security 团队再次像往常一样,没有想到为新手提供有用的示例。他们为什么要这么做。似乎只要说现在的做法有所不同就足够了。具体如何,需要新手花无数个小时才能找到答案。无论如何,乌合之众有足够的时间。专业人士肯定知道它是如何工作的......
我想实现一个 AuthorizationManager,它使用自定义投票器扩展当前的 Spring Security 决策逻辑。如果抛出 AccessDeniedException 或 AuthorizationException(至少在遗留示例中,这些异常用于确定是否启动身份验证过程或调用 AccessDeniedHandler),则该投票者应在 ConfigAttributes 的帮助下决定作为最后一个实例。
更准确地说:
我想使用以下权限注释方法:如果用户未登录,则调用这些方法/端点将启动登录过程。其他任何情况都会自动导致 404。
对于遗留类,可以在互联网上找到足够的示例。但对于新的来说什么都没有——什么都没有:(。任何人都可以告诉我在哪里可以找到实现自定义 AuthorizationManager 的示例,该自定义 AuthorizationManager 会考虑现有选民并实现我自己的选民?
提前谢谢了
我知道这已经有几个月了,但我在其他地方没有看到答案,所以我将分享我发现的内容:
当我阅读新文档时,您似乎链接access(AuthorizationManager<T> authorizationManager)
到了requestMatchers()
对 URL 模式的调用。AuthorizationManager<T>
是一个有两个方法的接口:
default void verify(Supplier<Authentication> authentication, T object)
Run Code Online (Sandbox Code Playgroud)
确定是否应授予特定authentication
和的访问权限object
。参数:
authentication
- 要检查的对象Supplier
-Authentication
要
object
检查AuthorizationManager
的对象 抛出:
AccessDeniedException
- 如果未授予访问权限
@Nullable
AuthorizationDecision check(Supplier<Authentication> authentication, T object)
Run Code Online (Sandbox Code Playgroud)
确定是否授予特定authentication
和的访问权限object
。参数:
authentication
-要检查的
Supplier
对象-要检查的对象Authentication
object
AuthorizationManager
返回:AuthorizationDecision
如果无法做出决定,则返回 an 或 null
access(...)
使用和方法中的逻辑扩展 AuthorizationManager verify(...)
,将其链接到您的RequestMatcher
逻辑,看起来就像这样。
要了解它如何适应当前架构,请查看此处:https://docs.spring.io/spring-security/reference/servlet/authorization/authorize-http-requests.html#request-authorization-architecture
作为快速总结,默认的最后一步是SecurityFilterChain
,AuthorizationFilter
它从 获取当前身份验证SecurityContext
并将其传递到AuthorizationManager
。授权管理器可以执行您想要做出授权决策的任何逻辑,然后将其传递回 AuthorizationFilter。
编辑添加
再看一遍,基本接口只是AuthorizationManager<T>
期望AuthorizationFilter
接收一个AuthorizationManager<HttpServletRequest>
. AuthorizationManager
您的代码可能最初会编译,但是当调用类型错误的方法之一时,您可能会遇到异常T object
。
归档时间: |
|
查看次数: |
5889 次 |
最近记录: |