通常,当您为您的应用程序(在我的例子中是 webapp)声明不同的“
我想在这两种方法(基于数据库的身份验证/基于 ldap 的身份验证)之间进行选择,并以某种方式切换基于此全局设置的实现。
我该怎么做?使用 Spring-Security 甚至有可能吗?
最佳答案
我将把如何将您自己的自定义身份验证提供程序注入(inject)到 Googleland 中的其他无数示例中在这里 StackOverflow .看起来它与用 xml 标记特定的 bean 有关。但希望我可以为您填写一些其他详细信息。
所以你已经像上面那样定义了这个类,我将添加更多你需要的 Spring 细节(即合并上面的东西。
public class SwitchingAuthenticationProvider implements AuthenticationProvider
{
....
public List<AuthenticationProvider> getProviders() { return delegateList; }
public void setProviders(List<AuthenticationProvider> providers) {
this.delegateList = providers;
}
....
}
这将允许您使用 spring 注入(inject)大量提供程序:
<bean id="customAuthProvider1" class=".....CustomProvider1"> ... </bean>
<bean id="customAuthProvider2" class=".....CustomProvider2"> ... </bean>
...
<bean id="customAuthProviderX" class=".....CustomProviderX"> ... </bean>
<bean id="authenticationProvider" class="....SwitchingAuthenticationProvider">
<security:custom-authentication-provider/>
<!-- using property injection (get/setProviders) in the bean class -->
<property name="providers">
<list>
<ref local="customAuthProvider1"/> <!-- Ref of 1st authenticator -->
<ref local="customAuthProvider2"/> <!-- Ref of 2nd authenticator -->
...
<ref local="customAuthProviderX"/> <!-- and so on for more -->
</list>
</property>
</bean>
最后,您填充提供者的方式可能是让委托(delegate)者获得提供者集合的任何方式。它们如何映射到使用哪一个取决于您。该集合可以是一个命名映射,基于委托(delegate)者的当前状态。它可能是一个包含多个尝试的列表。它可以是两个属性,“get/setPrimary”和“get/setSecondary”,用于类似故障转移的功能。注入(inject)委托(delegate)人后,可能性由您决定。
如果这不能回答您的问题,请告诉我。
关于java - 使用 Spring Security 在运行时切换身份验证方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2279621/