AuthenticationEntryPoint 取决于所需的角色
AuthenticationEntryPoint dependent on required roles
备用标题
- 如何从
HttpServletRequest
中获取映射的 Method
?
- 如何根据
@Secured
注释而不是路径应用 WebSecurityConfig
?
问题
我有一个 Spring MVC 服务器使用 @Secured
注释来指定每个控制器方法所需的角色 - 它们不容易映射到路径模式。
某些角色是通过特定的身份验证方法授予的(例如 x509、基本领域 A、基本领域 B、承载令牌)。
当调用者未通过身份验证时,WWW-Authenticate header 不应建议未授予方法所需角色的内容。
我在哪里
我认为最简单的方法是为 HttpSecurity 配置所有可能的身份验证方法,然后 permitAll()
,将所有检查委托给方法安全性。但是,当这失败时,我只能为链定义一个AuthenticationEntryPoint
。
因此我需要实现一个 AuthenticationEntryPoint
,其行为取决于所需的角色,但我一直无法找到在 commence
方法中获取该信息的方法 - 似乎是没有方法或属性详细说明映射的 Method
(我可以从中检查注释)或所需的角色(在 request
object 或 InsufficientAuthenticationException
中)。
出于同样的原因,DelegatingAuthenticationEntryPoint
将不起作用,因为我也无法在 RequestMatcher
中获得这些东西。
有没有什么豆子可以让我轻松掌握这些信息?
我是否在解决问题的正确轨道上?
How do I get the mapped Method from an HttpServletRequest
Method method = ((HandlerMethod) ((ApplicationContext) request
.getAttribute(DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE))
.getBean("requestMappingHandlerMapping", HandlerMapping.class)
.getHandler(request)
.getHandler())
.getMethod();
HandlerMethod
上还有一个 getMethodAnnotation(Class)
可以跳过一个步骤。
从那里您可以获得 @Secured
注释的详细信息并找出所需的角色。
备用标题
- 如何从
HttpServletRequest
中获取映射的Method
? - 如何根据
@Secured
注释而不是路径应用WebSecurityConfig
?
问题
我有一个 Spring MVC 服务器使用 @Secured
注释来指定每个控制器方法所需的角色 - 它们不容易映射到路径模式。
某些角色是通过特定的身份验证方法授予的(例如 x509、基本领域 A、基本领域 B、承载令牌)。
当调用者未通过身份验证时,WWW-Authenticate header 不应建议未授予方法所需角色的内容。
我在哪里
我认为最简单的方法是为 HttpSecurity 配置所有可能的身份验证方法,然后 permitAll()
,将所有检查委托给方法安全性。但是,当这失败时,我只能为链定义一个AuthenticationEntryPoint
。
因此我需要实现一个 AuthenticationEntryPoint
,其行为取决于所需的角色,但我一直无法找到在 commence
方法中获取该信息的方法 - 似乎是没有方法或属性详细说明映射的 Method
(我可以从中检查注释)或所需的角色(在 request
object 或 InsufficientAuthenticationException
中)。
出于同样的原因,DelegatingAuthenticationEntryPoint
将不起作用,因为我也无法在 RequestMatcher
中获得这些东西。
有没有什么豆子可以让我轻松掌握这些信息?
我是否在解决问题的正确轨道上?
How do I get the mapped Method from an HttpServletRequest
Method method = ((HandlerMethod) ((ApplicationContext) request
.getAttribute(DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE))
.getBean("requestMappingHandlerMapping", HandlerMapping.class)
.getHandler(request)
.getHandler())
.getMethod();
HandlerMethod
上还有一个 getMethodAnnotation(Class)
可以跳过一个步骤。
从那里您可以获得 @Secured
注释的详细信息并找出所需的角色。