Java Spring安全性-多个身份验证提供程序
我的web应用程序有多个身份验证管理器(一个用于API,一个用于web访问)。api应该只有一个基本的身份验证服务-通过spring安全标记配置,如下所示:Java Spring安全性-多个身份验证提供程序,java,spring,authentication,spring-security,Java,Spring,Authentication,Spring Security,我的web应用程序有多个身份验证管理器(一个用于API,一个用于web访问)。api应该只有一个基本的身份验证服务-通过spring安全标记配置,如下所示: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:security="http://www.springframework.org/schema/security"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd">
<security:authentication-manager alias="apiAuthenticationManager">
<security:authentication-provider ref="apiAuthenticationProvider" />
</security:authentication-manager>
<security:authentication-provider >
<security:user-service>
<security:user name="apiadmin" password="password" authorities="ROLE_API_ADMIN" />
<security:user name="apiuser" password="otherpassword" authorities="ROLE_API_USER" />
</security:user-service>
</security:authentication-provider>
...
...
我无法内联身份验证提供程序,因为我希望它可以被子bean配置覆盖
我的问题是,我无法在security:authentication provider元素上定义别名/id以在身份验证管理器中引用它。有没有一个简单的解决方法
解决方案:
我终于想出了如何使用名称空间的方法,而不必深入到普通bean配置:)
请记住,这个Spring安全XML名称空间只是组织XML的一种简洁方式。您可以使用纯
配置实现完全相同的解决方案。这样你就可以像往常一样使用ID了。可能会对您有所帮助。在命名空间中,可以使用带有名称的@服务(“userDetailsService”)
将名称添加到java
中
您还可以定义bean并将其添加到链中
<bean id="myFilter" class="a.b.c.myFilter">
<security:custom-filter before="BASIC_PROCESSING_FILTER" />
<property name="authenticationManager" ref="_authenticationManager" />
</bean>
<bean id="myProvider" class="a.b.c.myProvider">
<security:custom-authentication-provider />
<property name="userDetailsService" ref="userDetailsService" />
</bean>
<security:http>
[...]
</security:http>
[...]
\u authenticationManager
是在命名空间中注册的bean的名称
这将在基本身份验证之前执行
<bean id="myFilter" class="a.b.c.myFilter">
<security:custom-filter before="BASIC_PROCESSING_FILTER" />
<property name="authenticationManager" ref="_authenticationManager" />
</bean>
<bean id="myProvider" class="a.b.c.myProvider">
<security:custom-authentication-provider />
<property name="userDetailsService" ref="userDetailsService" />
</bean>
<security:http>
[...]
</security:http>