mvc中spring security中每个路径/路由的authenticationmanager不同

x0fgdtte  于 2021-09-29  发布在  Java
关注(0)|答案(0)|浏览(310)

序言

由于有关stackoverflow的问题已经很多了,我首先要确保这不是重复和区别。
这是关于
在两个不同的AuthenticationManager中有两个(或更多)不同的AuthenticationProvider,用于不同的路由。
使用SpringSecurity 5.5而不是3.x中的方法
使用基于非xml配置的方法
因此,问题不在于:
如何在on authenticationmanager中包含多个AuthenticationProviders以提供“替代身份验证”(大多数问题都是这样)

案例

假设有两个自定义身份验证提供程序:catapitokenprovider和dogapitokenprovider。我们之所以不谈论aouth/jwt/basic/formproviders,是因为它们提供了快捷方式。
现在我们有两个RESTAPI端点 /dog/endpoint/cat/endpoint .

问题:

在今天的spring security 5.5中,如何正确实现这一点:
我们需要身份验证提供者 CATApiTokenProvider 仅能够对上的请求进行身份验证 /cat/endpoint 我们需要身份验证提供者 DOGApiTokenProvider 仅能够对上的请求进行身份验证 /dog/endpoint 因此,用户无法使用计算机上的cat令牌进行身份验证 /dog/endpoint 也没有带狗牌的 /cat/endpoint .
我的想法/方法
a) 我知道,因为我有定制的猫/狗过滤器,所以可以使用 AuthenticationManagerResolver 并在创建bean时将一个示例传递到过滤器中。此解析器可能看起来像

public AuthenticationManagerResolver<HttpServletRequest> resolver()
  {
    return request -> {
      if (request.getPathInfo().startsWith("/dog/")) {
        try {
          return ???;
        } catch (Exception exception) {
          log.error(exception);
        }
      }
      if (request.getPathInfo().startsWith("/cat/")) {
        try {
          return ???;
        } catch (Exception exception) {
          log.error(exception);
        }
      }
    };
  }

与此相关的两个问题是:
如何在此处返回不同的身份验证管理器?如何用每个catap和dogap示例化2个不同的am?目前我使用 public void configure(AuthenticationManagerBuilder auth) 但据我所知,我只会配置“the one”authenticationmanager,我可以在那里添加dogap和catap,但这会让1个am和2个AP成为可能,因此当使用此am时,我可以在cat端点上使用dog令牌进行身份验证
这真的是实现这一目标的正确方式吗?我希望能够在securityconfiguration级别上提供am
b) 以某种方式示例化2个不同的AuthenticationManager,然后使用securityconfiguration将它们分配给不同的匹配器。
两个问题:
使用不同的提供商生成2个不同的ams的正确方法是什么?
我无法理解如何为规范添加am

http.authorizeRequests()
      .antMatchers("/dog/**")
      .?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题