我的 Web 应用程序有多个身份验证管理器(一个用于 API,一个用于 WEB 访问)。 api 应该只有一个基本的身份验证服务 - 通过 spring security 标记进行配置,如下所示:
<?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 配置:)
<security:user-service id="apiUserDetailsService">
<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-manager alias="apiAuthenticationManager">
<security:authentication-provider user-service-ref="apiUserDetailsService"/>
</security:authentication-manager>
请记住,这个 Spring Security XML 命名空间只是组织 XML 的一种巧妙方式。您可以使用简单的方法实现完全相同的解决方案<bean>
配置。这样您就可以像往常一样使用 ID。这篇博文 http://blog.springsource.org/2010/03/06/behind-the-spring-security-namespace/可能对你有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)