0

备用标题

  • 如何Method从中获取映射HttpServletRequest
  • 如何WebSecurityConfig基于@Secured注释而不是路径应用?

问题

我有一个 Spring MVC 服务器,它使用@Secured注释来指定每个控制器方法所需的角色——它们不容易映射到路径模式。

某些角色是通过特定的身份验证方法授予的(例如 x509、基本领域 A、基本领域 B、承载令牌)。

当调用者未通过身份验证时,WWW-Authenticate 标头不应建议未授予该方法所需角色的内容。

我在哪里

我认为最简单的方法是为 HttpSecurity 配置所有可能的身份验证方法,并将permitAll()所有检查委托给方法安全性。AuthenticationEntryPoint但是,当失败时,我只能为链定义一个。

因此,我需要实现AuthenticationEntryPoint其行为取决于所需角色的行为,但我一直无法找到在方法中获取该信息的commence方法 - 似乎没有详细说明映射的方法或属性Method(我可以从中检查注释) 或所需的角色(在request对象或 中InsufficientAuthenticationException)。

出于同样的原因, aDelegatingAuthenticationEntryPoint也行不通,因为我也无法解决这些问题RequestMatcher

是否有一个 bean 可以让我轻松掌握这些信息?

我是否走上了解决问题的正确轨道?

4

1 回答 1

0

如何从 HttpServletRequest 获取映射的方法

Method method = ((HandlerMethod) ((ApplicationContext) request
    .getAttribute(DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE))
    .getBean("requestMappingHandlerMapping", HandlerMapping.class)
    .getHandler(request)
    .getHandler())
    .getMethod();

还有一个getMethodAnnotation(Class)可以HandlerMethod跳过一个步骤。

从那里您可以获取@Secured注释的详细信息并找出所需的角色。

于 2016-03-18T17:00:52.043 回答