AuthenticationEntryPoint 取决于所需的角色

AuthenticationEntryPoint dependent on required roles

备用标题

问题

我有一个 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 注释的详细信息并找出所需的角色。