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

使用Apache Shiro进行身份认证-Active Directory认证

 
阅读更多

Apache Shiro 支持基于活动目录的用户认证。

其配置文件shiro.ini配置如下:

activeDirectoryRealm = org.apache.shiro.realm.activedirectory.ActiveDirectoryRealm
activeDirectoryRealm.url = ldap://192.168.131.111:389
activeDirectoryRealm.principalSuffix = @example.com

使用的认证类为ActiveDirectoryRealm。具体调研的方法是queryForAuthenticationInfo(AuthenticationToken token, LdapContextFactory ldapContextFactory)

这里需要一个ldapContextFactory类。系统在初始化时会默认创建一个缺省DefaultLdapContextFactory类。

具体调用是在AbstractLdapRealm中:

 protected void onInit() {
        super.onInit();
        ensureContextFactory();
    }

    private LdapContextFactory ensureContextFactory() {
        if (this.ldapContextFactory == null) {

            if (log.isDebugEnabled()) {
                log.debug("No LdapContextFactory specified - creating a default instance.");
            }

            DefaultLdapContextFactory defaultFactory = new DefaultLdapContextFactory();
            defaultFactory.setPrincipalSuffix(this.principalSuffix);
            defaultFactory.setSearchBase(this.searchBase);
            defaultFactory.setUrl(this.url);
            defaultFactory.setSystemUsername(this.systemUsername);
            defaultFactory.setSystemPassword(this.systemPassword);

            this.ldapContextFactory = defaultFactory;
        }
        return this.ldapContextFactory;
    }

用户的认证实现是在DefaultLdapContextFactory类中实现,这部分可以改进一下采用两次绑定会更好
public LdapContext getLdapContext(Object principal, Object credentials) throws NamingException {
        if (url == null) {
            throw new IllegalStateException("An LDAP URL must be specified of the form ldap://<hostname>:<port>");
        }

        Hashtable<String, Object> env = new Hashtable<String, Object>();

        env.put(Context.SECURITY_AUTHENTICATION, authentication);
        if (principal != null) {
            env.put(Context.SECURITY_PRINCIPAL, principal);
        }
        if (credentials!= null) {
            env.put(Context.SECURITY_CREDENTIALS, credentials);
        }
        env.put(Context.INITIAL_CONTEXT_FACTORY, contextFactoryClassName);
        env.put(Context.PROVIDER_URL, url);
        env.put(Context.REFERRAL, referral);

        // Only pool connections for system contexts
        if (usePooling && principal != null && principal.equals(systemUsername)) {
            // Enable connection pooling
            env.put(SUN_CONNECTION_POOLING_PROPERTY, "true");
        }

        if (additionalEnvironment != null) {
            env.putAll(additionalEnvironment);
        }

        if (log.isDebugEnabled()) {
            log.debug("Initializing LDAP context using URL [" + url + "] and username [" + systemUsername + "] " +
                    "with pooling [" + (usePooling ? "enabled" : "disabled") + "]");
        }

        return new InitialLdapContext(env, null);
    }

基本上活动目录的认证方式同LDAP认证方式是一样的。因为ad(活动目录)本身就是基于ldap协议的一个微软产品。

分享到:
评论

相关推荐

    安全认证框架-Apache_Shiro研究心得

    ### 安全认证框架-Apache Shiro研究心得 #### Apache Shiro简介 Apache Shiro 是一个强大且易用的 Java 安全框架,提供了认证、授权、加密和会话管理功能,可以非常容易地开发出足够安全的应用——无论它们是部署...

    使用Apache Shiro保护你的WEB应用

    Shiro支持多种身份验证数据源,如LDAP、JDBC、Kerberos和Active Directory,同时也提供了细粒度的授权机制。此外,它还包括会话管理和加密功能,且不依赖特定的框架或容器,可在各种环境中独立运行。 Shiro的核心...

    Apache Shiro教程

    Apache Shiro是一个广泛使用的Java安全框架,它为身份验证、授权、加密以及会话管理提供了易于使用的API,同时支持JavaSE和JavaEE环境。Shiro的简单和直接让它在开发社区中备受欢迎,尤其对于那些不希望在安全领域...

    apache shiro概述

    Apache Shiro是一个强大的Java安全框架,它专注于身份验证、授权、会话管理和加密等功能,旨在简化应用程序的安全管理。与Spring Security相比,Shiro以其简洁易懂的API和配置而受到青睐,更适合那些需要快速实现...

    SpringMVC-Mybatis-Shiro-redis-master 权限集成缓存中实例

    * 原因:如果你把这个项目叫 ShiroDemo,那么路径就是 /ShiroDemo/xxxx.shtml ,那另外一个人使用,又叫Shiro_Demo,那么就要这么控制/Shiro_Demo/xxxx.shtml * 理解了吗? * 所以这里替换了一下,使用根目录开始...

    Shiro安全框架概念

    Shiro支持多种数据源进行身份验证,如JDBC、LDAP、Kerberos和Microsoft Active Directory,这使得它非常适合大型企业中的单点登录(SSO)解决方案。此外,Shiro的Session对象允许在非Web环境中使用会话,降低了对...

    shiro权限框架文档

    Shiro支持多种后端数据源,例如JDBC、LDAP、Active Directory等,使得Shiro可以轻松地与企业级系统集成。 Shiro的架构设计使得它的使用非常灵活,可以通过实现自己的Realms、Authenticators、Authorizers等组件来...

    Waffle1.5-java版本window主机认证

    然后,Waffle 将处理从请求中提取身份验证信息,并使用 Windows 凭据进行验证。一旦验证成功,用户就可以被授权访问相应的资源。 **总结** Waffle 1.5 是 Java 开发者在 Windows 环境下实现安全认证的理想工具,它...

    shiro相关jar

    2. **灵活的身份认证**:支持多种数据源(如LDAP、JDBC、Kerberos、Active Directory等),使得认证过程更加灵活多变。 3. **细粒度的权限管理**:不仅支持基于角色的权限控制,还支持更为精细的权限分配机制。 4. *...

    基于Java的两个通用安全模块的设计与实现.zip

    JAAS提供了可扩展的模型,允许开发者添加自定义的身份验证模块,例如,支持LDAP、Active Directory或者数据库验证。此外,Spring Security是另一个流行的Java安全框架,它提供了丰富的身份验证和授权功能,包括支持...

    单点登入--CAS3.0

    - CAS设计为模块化,方便添加新的认证机制,如LDAP、Active Directory、数据库等。 9. **单点登出(Single Sign-Out,SSO)**: - CAS还支持单点登出功能,用户在一处登出时,其他所有受CAS保护的应用也会同步...

    cas_sso.rar_CAS_CAS SSO_cas文档_sso C_单点登录

    CAS可以通过插件系统与其他系统进行集成,例如与OAuth、OpenID Connect、SAML等身份协议的互操作,或与Spring Security、Apache Shiro等安全框架配合使用。这使得CAS能够适应更广泛的生态系统。 **维护与监控** ...

    CAS介绍资源页面

    4. **扩展性和定制化**:CAS支持多种认证方式,如LDAP、数据库、Active Directory等,可以根据实际需求进行配置。此外,其开放源码特性使得开发者可以自定义扩展,满足特定业务场景。 5. **安全性**:CAS提供了一种...

    CAS服务端应用

    例如,可以集成LDAP、数据库、Active Directory等不同的身份源,或者实现更复杂的认证逻辑。 6. **安全性**:CAS服务器的安全性至关重要,包括HTTPS通信、票证加密、防止重放攻击等措施。此外,还可以配置安全策略...

    CAS单点登录配置大全

    3. **认证模块**:根据组织需求,选择合适的认证模块,如LDAP、JDBC、Active Directory等。 4. **自定义服务**:在`servicesRegistry.xml`中定义你的应用服务,包括服务ID和服务URL。 5. **证书配置**:为了安全,...

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

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

    AzureAD:Recursos Para Integrator Tu proyecto Java Web azure AD中值登录名

    在Java Web项目中,通常使用Spring Security或Apache Shiro等框架来处理用户身份验证和授权。这些框架可以与Azure AD集成,利用其强大的身份验证服务。 3. **Azure AD集成步骤** - **注册应用**:首先,你需要在...

Global site tag (gtag.js) - Google Analytics