Java 一个Spring应用程序中的多个WebSpecurityConfig
从安全角度来看,我们正在维护应用程序的两个版本Java 一个Spring应用程序中的多个WebSpecurityConfig,java,spring-boot,spring-security,spring-saml,Java,Spring Boot,Spring Security,Spring Saml,从安全角度来看,我们正在维护应用程序的两个版本 1. SAML based spring security 2. Spring and JDBC based application security. 因为我们的一些客户已经拥有SAML IDP(如ADFS和GLUU),他们希望我们为SSO集成它们,而一些客户没有SAML IDP 是否有一种方法可以使两种配置共存,并且基于使用应用程序的客户,将安全性强加于用户 例如:如果客户a.myserverhost.com提出请求,则会强制实施基于SAM
1. SAML based spring security
2. Spring and JDBC based application security.
因为我们的一些客户已经拥有SAML IDP(如ADFS和GLUU),他们希望我们为SSO集成它们,而一些客户没有SAML IDP
是否有一种方法可以使两种配置共存,并且基于使用应用程序的客户,将安全性强加于用户
例如:如果客户a.myserverhost.com提出请求,则会强制实施基于SAML的安全配置。如果请求是form b.myserverhost.com,则另一个WebSpecurityConfig被强制执行是,所有这些都是可能的。我的建议是实现您自己的,它管理多个s(例如SAML、JDBC) 在这里,您可以插入条件逻辑,以便根据特定条件选择正确的提供程序 要获得灵感,请查看默认实现
开箱即用,ProviderManager将迭代所有AuthenticationProviders并尝试对用户进行身份验证。如果找不到用户,它将转到下一个用户。如果这就是您所需要的,那么您就不需要任何自定义实现。感谢您的回答,它帮助我找到了灵感,将尝试实现。我相信在检查URL后,我会在WebSecurity配置方法configure中使用“auth.authenticationProvider(samlAuthenticationProvider());”调用正确的身份验证提供程序。该方法是AuthenticationManagerBuilder的一部分,是注册身份验证提供程序的地方。这不是定义条件逻辑的地方。您需要通过两次调用同一方法来注册这两个提供程序:authenticationProvider(saml())和authenticationProvider(jdbc())。然后在CustomAuthenticationManager中实现authenticate()方法,这就是定义条件逻辑的地方。正如我前面提到的,默认实现ProviderManager将迭代每个AuthenticationProvider,直到返回成功的身份验证为止^。