`
hanqunfeng
  • 浏览: 1541960 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SpringSecurity3.X--LDAP:AD配置

 
阅读更多

前面介绍过基于本地数据库验证的方式,参考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

0
0
分享到:
评论

相关推荐

    LDAP实现AD域账号验证 - Java/SpringBoot

    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"); ...

    Springboot-LDAP针对AD域控做用户和组织进行同步.zip

    本文将深入探讨如何使用Spring Boot 2.x与LDAP集成,特别是在与Active Directory(AD)域控制器交互,实现用户和组织的同步。 首先,让我们了解Spring Boot 2.x。Spring Boot是Spring框架的一个扩展,它简化了创建...

    Java操作ldap(springboot工程)

    Spring Security可以与Spring LDAP结合,实现基于LDAP的身份验证和授权。 至于`AccountSync`这个文件名,很可能指的是一个负责同步 LDAP 账户信息的类或模块。这可能是一个定时任务,定期检查 LDAP 服务器上的账户...

    Yale CAS Server的部署及cas-java-client 3.2的应用

    4. 集成到Spring Security:如果你使用Spring Security,可以将`CasAuthenticationHandler`添加到安全配置中,以处理CAS认证。 5. 处理SSO流程:当用户尝试访问受保护资源时,如果未认证,应用会重定向到CAS服务器...

    JAVA对接AD域集成.rar

    此外,还可以考虑使用Spring框架的LdapTemplate,它提供了更简洁、安全的接口来操作AD。 总结,Java对接AD域集成涉及到的主要知识点包括:JNDI API的使用、LDAP协议的理解、AD域结构的认识、以及异常处理和权限管理...

    java ad域操作

    避免硬编码凭证,并考虑使用安全的存储方式,如Java的`java.security.KeyStore`或Spring Security的`UserDetailsService`。 总结起来,Java通过JNDI和相关的库提供了强大的能力来操作AD域,包括连接、查询、读写...

    cas sso server page

    CAS支持多种认证机制,包括基于数据库、LDAP、AD域、SPNEGO、X.509证书等。开发者可以根据组织的需求选择合适的认证策略,并在CAS配置中进行设置。 6. 安全与扩展性: CAS提供了一些安全特性,如SSL/TLS加密通信...

    基于Cas的单点登录实现

    - **认证器**: 配置认证策略,例如使用JDBC、LDAP或AD进行用户身份验证。 - **服务注册**: 在Cas服务器上注册所有需要SSO的服务,提供服务URL和服务ID。 - **协议配置**: 根据需求选择合适的协议,如CAS、SAML等,并...

    AD-desktop-app

    标题“AD-desktop-app”暗示我们讨论的是一个与Active Directory(AD)相关的桌面应用程序。这个程序可能用于管理用户账户、权限分配、组策略等AD服务。描述中的内容虽然简洁,但通常意味着项目的核心功能是围绕AD...

    权限管理系统源码

    在实现上,权限管理系统可能采用多种技术,如数据库(如MySQL、Oracle)用于存储用户和权限信息,身份验证框架(如Spring Security、OAuth2)用于处理用户认证和授权,以及前端框架(如React、Vue)构建用户界面。...

    MaxKey单点登录认证系统-其他

    SpringSecurity OAuth 2客户端登录适配 移除Desktop的支持,后续可以开发FormBase的适配器定制 application.properties profiles的优化,不同环境启动更加简单 删除maxkey.properties,配置整合到 application....

    用户权限管理设计(WebLogic,WepSphere,Tomcat)

    此外,WebSphere还支持LDAP(Lightweight Directory Access Protocol)和AD(Active Directory)等外部目录服务进行用户认证,增强了安全性与灵活性。 Tomcat则是一个轻量级的Servlet容器,虽然其默认的安全特性...

    单点登录DEMO

    WebSSOAuth可能是一个基于特定框架(如Spring Security或Apache Shiro)实现的身份验证服务器,负责处理用户的登录请求,验证用户凭证,并生成安全的令牌(如JWT或Cookie)。这个服务通常会维护一个中央用户数据库,...

Global site tag (gtag.js) - Google Analytics