SpringSecurity按前缀选择身份验证提供程序

时间:2018-01-17 10:19:00

标签: java authentication spring-security

我有一个由SpringSecurity保护的Spring REST-API。

我有不同的方法在该应用程序中进行身份验证。

  • 客户(db)
  • 员工(ldap)
  • 其他应用程序/服务(inMemory)

其中每个都由不同的身份验证提供程序覆盖,该提供程序可以正确分配访问角色。 (工程)

但是,我需要知道使用哪个身份验证提供程序来验证用户,因此我可以将其写入日志,历史记录......

User CUSTOMER/max.pain created a new entry.

当然,用户名并不真正包含该前缀,无论是在db中还是在ldap中。

我考虑过根据所使用的身份验证提供程序添加一个特殊角色,但反复提取该信息很烦人,可能性能不佳,并可能在将来导致问题。 (user.getGrantedAuthorities().findStartingWith("AP_")

我也尝试使用org.springframework.security.config.annotation.SecurityConfigurerAdapter.addObjectPostProcessor(ObjectPostProcessor<?>),但我无法使用它来使用自定义AuthenticationProvider类包装AuthenticationProvider,因为无论出于何种原因它都需要使用same class

我是否可以使用inbuild方法来实现该功能,还是必须使用自定义实现/配置?

Prozess步骤:

  1. 登录:EMPLOYEE / always.calm
  2. 请勿检查CUSTOMER AuthenticationProvider
  3. 检查EMPLOYEE AuthenticationProvider
  4. 不要检查SERVICE AuthenticationProvider
  5. authentication.getPrincipal()。getAP()= EMPLOYEE

0 个答案:

没有答案