AuthenticationEntryPoint 依赖于所需的角色



备用标题

  • 如何从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注释的详细信息,并找出所需的角色。

相关内容

  • 没有找到相关文章

最新更新