前面介绍过基于本地数据库验证的方式,参考http://hanqunfeng.iteye.com/blog/1155226,这里说一下如何修改为使用AD进行身份验证【只对用户名和密码进行验证,权限依旧存储在本地数据库中】。
将配置文件中的如下部分删除:
<!-- 认证管理器,使用自定义的UserDetailsService,并对密码采用md5加密--> <authentication-manager> <authentication-provider user-service-ref="userService"> <password-encoder hash="md5" /> </authentication-provider> </authentication-manager> <beans:bean id="userService" class="com.piaoyi.common.security.UserService" />
并添加如下内容:
<!-- ldap contextSource ldap服务器 --> <!-- 继承于org.springframework.ldap.core.support.LdapContextSource --> <beans:bean id="contextSource" class="org.springframework.security.ldap.DefaultSpringSecurityContextSource"> <beans:constructor-arg value="ldap://192.168.159.xxx:389" /> <beans:property name="userDn" value="cn=admin,cn=Users,dc=piaoyi,dc=local" /> <beans:property name="password" value="xxxxxxx" /> </beans:bean> <!-- ldap 认证代理 --> <beans:bean id="ldapAuthProvider" class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider"> <beans:constructor-arg ref="ldapBindAuthenticator" /> <beans:constructor-arg ref="ldapAuthoritiesPopulator" /> </beans:bean> <!-- 用户认证:凭证绑定 --> <beans:bean id="ldapBindAuthenticator" class="org.springframework.security.ldap.authentication.BindAuthenticator"> <beans:constructor-arg ref="contextSource" /> <beans:property name="userSearch" ref="userSearch" /> </beans:bean> <!-- 用户查询规则 --> <beans:bean id="userSearch" class="org.springframework.security.ldap.search.FilterBasedLdapUserSearch"> <beans:constructor-arg index="0" value="cn=Users,dc=piaoyi,dc=local" /> <beans:constructor-arg index="1" value="(sAMAccountName={0})" /> <beans:constructor-arg index="2" ref="contextSource" /> </beans:bean> <!-- 角色控制,这里授予所有AD验证通过的用户HODLE角色 --> <beans:bean class="com.netqin.common.security.SimpleRoleGrantingLdapAuthoritiesPopulator" id="ldapAuthoritiesPopulator" /> <!-- 认证管理器,如果使用基于cookie的<remember-me/>,需要声明LdapUserDetailsService --> <authentication-manager> <authentication-provider ref="ldapAuthProvider" /> </authentication-manager> <!-- ldapUserDetailsService 用于<remember-me user-service-ref="ldapUserDetailsService"/> --> <beans:bean id="ldapUserDetailsService" class="org.springframework.security.ldap.userdetails.LdapUserDetailsService"> <beans:constructor-arg index="0" ref="userSearch" /> <beans:constructor-arg index="1" ref="ldapAuthoritiesPopulator" /> </beans:bean>
这里仅使用到一个自定义类,它只有一个作用,就是授予所有用户HODLE角色,而真正的权限验证还是交给投票器处理。
SimpleRoleGrantingLdapAuthoritiesPopulator:
package com.netqin.common.security; import java.util.Arrays; import java.util.Collection; import org.springframework.ldap.core.DirContextOperations; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.ldap.userdetails.LdapAuthoritiesPopulator; public class SimpleRoleGrantingLdapAuthoritiesPopulator implements LdapAuthoritiesPopulator { protected String role = "HODLE"; public Collection<GrantedAuthority> getGrantedAuthorities( DirContextOperations userData, String username) { GrantedAuthority ga = new SimpleGrantedAuthority(role); return Arrays.asList(ga); } public String getRole() { return role; } public void setRole(String role) { this.role = role; } }
参考资料:
http://lengyun3566.iteye.com/blog/1358310
相关推荐
contextSource.setUrl("ldap://your-ad-server:389"); contextSource.setBase("dc=example,dc=com"); contextSource.setUserDn("cn=admin,dc=example,dc=com"); contextSource.setPassword("admin-password"); ...
本文将深入探讨如何使用Spring Boot 2.x与LDAP集成,特别是在与Active Directory(AD)域控制器交互,实现用户和组织的同步。 首先,让我们了解Spring Boot 2.x。Spring Boot是Spring框架的一个扩展,它简化了创建...
Spring Security可以与Spring LDAP结合,实现基于LDAP的身份验证和授权。 至于`AccountSync`这个文件名,很可能指的是一个负责同步 LDAP 账户信息的类或模块。这可能是一个定时任务,定期检查 LDAP 服务器上的账户...
4. 集成到Spring Security:如果你使用Spring Security,可以将`CasAuthenticationHandler`添加到安全配置中,以处理CAS认证。 5. 处理SSO流程:当用户尝试访问受保护资源时,如果未认证,应用会重定向到CAS服务器...
此外,还可以考虑使用Spring框架的LdapTemplate,它提供了更简洁、安全的接口来操作AD。 总结,Java对接AD域集成涉及到的主要知识点包括:JNDI API的使用、LDAP协议的理解、AD域结构的认识、以及异常处理和权限管理...
避免硬编码凭证,并考虑使用安全的存储方式,如Java的`java.security.KeyStore`或Spring Security的`UserDetailsService`。 总结起来,Java通过JNDI和相关的库提供了强大的能力来操作AD域,包括连接、查询、读写...
CAS支持多种认证机制,包括基于数据库、LDAP、AD域、SPNEGO、X.509证书等。开发者可以根据组织的需求选择合适的认证策略,并在CAS配置中进行设置。 6. 安全与扩展性: CAS提供了一些安全特性,如SSL/TLS加密通信...
- **认证器**: 配置认证策略,例如使用JDBC、LDAP或AD进行用户身份验证。 - **服务注册**: 在Cas服务器上注册所有需要SSO的服务,提供服务URL和服务ID。 - **协议配置**: 根据需求选择合适的协议,如CAS、SAML等,并...
标题“AD-desktop-app”暗示我们讨论的是一个与Active Directory(AD)相关的桌面应用程序。这个程序可能用于管理用户账户、权限分配、组策略等AD服务。描述中的内容虽然简洁,但通常意味着项目的核心功能是围绕AD...
在实现上,权限管理系统可能采用多种技术,如数据库(如MySQL、Oracle)用于存储用户和权限信息,身份验证框架(如Spring Security、OAuth2)用于处理用户认证和授权,以及前端框架(如React、Vue)构建用户界面。...
SpringSecurity OAuth 2客户端登录适配 移除Desktop的支持,后续可以开发FormBase的适配器定制 application.properties profiles的优化,不同环境启动更加简单 删除maxkey.properties,配置整合到 application....
此外,WebSphere还支持LDAP(Lightweight Directory Access Protocol)和AD(Active Directory)等外部目录服务进行用户认证,增强了安全性与灵活性。 Tomcat则是一个轻量级的Servlet容器,虽然其默认的安全特性...
WebSSOAuth可能是一个基于特定框架(如Spring Security或Apache Shiro)实现的身份验证服务器,负责处理用户的登录请求,验证用户凭证,并生成安全的令牌(如JWT或Cookie)。这个服务通常会维护一个中央用户数据库,...