AuthenticationEntryPoint依赖于所需的角色

时间:2016-02-02 16:54:26

标签: spring spring-mvc spring-security spring-4 servlet-3.1

替代标题

  • 如何从Method
  • 获取映射的HttpServletRequest
  • 如何根据WebSecurityConfig注释而不是路径应用@Secured

问题

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

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

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

我在哪里

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

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

出于同样的原因,DelegatingAuthenticationEntryPoint不会工作,因为我无法在RequestMatcher中获得这些内容。

是否有漂浮的豆子可以让我轻松掌握这些信息?

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

1 个答案:

答案 0 :(得分: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注释的详细信息,并找出所需的角色。