Spring LdapAuthentication和从本地数据库加载角色
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Spring LdapAuthentication和从本地数据库加载角色,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2709字,纯文字阅读大概需要4分钟。
内容图文
![Spring LdapAuthentication和从本地数据库加载角色](/upload/InfoBanner/zyjiaocheng/911/237d0a4af3e9477cba990402f2b6d605.jpg)
我已将Spring Security配置为针对LDAP服务器进行身份验证.
<security:authentication-manager >
<security:ldap-authentication-provider user-dn-pattern="uid={0}" />
</security:authentication-manager>
身份验证后,我想从本地数据库为同一用户加载角色.如何使用“ldap-authentication-provider”加载本地数据库角色?
如果我添加第二个身份验证提供程序如下:
<security:authentication-manager >
<security:ldap-authentication-provider user-dn-pattern="uid={0}" />
<security:authentication-provider ref="daoAuthenticationProvider" />
</security:authentication-manager>
添加了daoAuthenticationProvider,但是当第一个auth提供程序对用户进行身份验证时,Spring不使用第二个提供程序.只有当第一个auth提供程序无法对其进行身份验证时,才会在列表中接下来.
所以基本上看起来我们必须定制
<security:ldap-authentication-provider user-dn-pattern="uid={0}" />
从本地数据库加载ROLE.
有什么建议?该如何实施?
解决方法:
身份验证提供程序必须在成功身份验证时提供完全填充的身份验证令牌,因此无法使用一个提供程序检查用户的凭据,而另一个提供程序则可以为其分配权限(角色).
但是,您可以自定义ldap auth提供程序以从数据库获取用户角色而不是默认行为(在ldap中搜索用户的组). LdapAuthenticationProvider注入了两个策略:一个执行身份验证(LdapAuthenticator),另一个获取用户权限(LdapAuthoritiesPopulator).如果您提供从数据库加载角色的LdapAuthoritiesPopulator实现,则可以实现您的要求.如果您已经有一个针对数据库的UserDetailsS??ervice,您可以通过将其包装在UserDetailsS??erviceLdapAuthoritiesPopulator中并将其注入LdapAuthenticationProvider中来轻松地集成它.
由于此配置相当罕见,因此安全xml命名空间不提供标记/属性来设置它,但原始bean配置并不太复杂.这是大纲:
1)我想你的配置中有一个ldap-server.分配和识别它很重要,这将允许我们稍后引用它.
<security:ldap-server url="..." id="ldapServer" .../>
2)从身份验证管理器部分,您将只引用自定义提供程序:
<security:authentication-manager>
<security:authentication-provider ref="customLdapAuthProvider"/>
</security:authentication-manager>
3)现在,必不可少的部分:
<bean id="customLdapAuthProvider" class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider">
<constructor-arg name="authenticator">
<bean class="org.springframework.security.ldap.authentication.BindAuthenticator">
<constructor-arg name="contextSource" ref="ldapServer"/>
<property name="userDnPatterns">
<list>
<value>uid={0}</value>
</list>
</property>
</bean>
</constructor-arg>
<constructor-arg name="authoritiesPopulator">
<bean class="org.springframework.security.ldap.authentication.UserDetailsServiceLdapAuthoritiesPopulator">
<constructor-arg name="userService" ref="userService"/>
</bean>
</constructor-arg>
</bean>
验证器与命名空间配置创建的验证器基本相同. (注意引用ldap服务器的contextSource属性.)
authoritiesPopulator是一个围绕你的userService实现的简单包装器,它应该在你的配置中的某个地方定义.
内容总结
以上是互联网集市为您收集整理的Spring LdapAuthentication和从本地数据库加载角色全部内容,希望文章能够帮你解决Spring LdapAuthentication和从本地数据库加载角色所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。