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