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

使用Apache Shiro进行身份认证-LDAP认证

 
阅读更多

Apache Shiro 支持LDAP做为数据源进行身份认证。我做了一个简单的实验来说明Shiro是如何支持LDAP的。

在本机安装了OpenLDAP,版本为2.4.23。手动建了一个用户,结构如下:

在Shiro.ini文件中配置LDAP:

[main]
ldapRealm = org.apache.shiro.realm.ldap.JndiLdapRealm
ldapRealm.userDnTemplate = cn={0},ou=产品研发部,ou=研发中心,dc=example,dc=com
ldapRealm.contextFactory.url = ldap://localhost:389

这样就可实现通过LDAP进行身份认证。


在Shiro中具体实现验证过程的是org.apache.shiro.realm.ldap.JndiLdapRealm类和org.apache.shiro.realm.ldap.JndiLdapContextFactory类。

protected AuthenticationInfo queryForAuthenticationInfo(AuthenticationToken token,
                                                            LdapContextFactory ldapContextFactory)
            throws NamingException {

        //从页面提交的用户名“lisi”
        Object principal = token.getPrincipal();
        //从页面提交的口令“123456”
        Object credentials = token.getCredentials();

        log.debug("Authenticating user '{}' through LDAP", principal);

        //将用户名拼成DN“cn=lisi,ou=产品研发部,ou=研发中心,dc=example,dc=com”
        principal = getLdapPrincipal(token);

        LdapContext ctx = null;
        try {
            //进行认证
            ctx = ldapContextFactory.getLdapContext(principal, credentials);
            //context was opened successfully, which means their credentials were valid.  Return the AuthenticationInfo:
            return createAuthenticationInfo(token, principal, credentials, ctx);
        } finally {
            LdapUtils.closeContext(ctx);
        }
    }

注,这里存在一个问题。如果输入不存在的用户或是错误的口令后currentUser.login(token);方法返回的异常是AuthenticationException,代表不确定的异常。

而不是UnknownAccountException或IncorrectCredentialsException。这样在前台表述时就不够准确。

原因应该是在做LDAP认证时没有区分错误情况,如果取不到context会抛出相同异常 throw new AuthenticationException("LDAP authentication failed.", e);


分享到:
评论

相关推荐

    shiro源码(shiro-root-1.8.0-source-release.zip)

    Realms是Shiro与应用安全数据源(如数据库、LDAP等)的桥梁,负责验证凭证。CredentialsMatcher则用于比较用户提供的凭证(如密码)和存储在 Realm 中的凭证。 2. **授权**: 授权是Shiro允许谁做什么的机制。...

    Apache shiro 1.13.0源码

    通过研究 Shiro 1.13.0 的源码,你可以了解到这些组件的实现细节,例如 Realm 如何连接数据库进行身份验证,Filter 如何拦截请求进行权限检查,以及会话管理如何处理分布式环境下的会话一致性问题。这对于深入理解 ...

    Apache Shiro教程

    Apache Shiro是一个强大的Java安全框架,它为应用程序提供了身份验证、授权、会话管理和加密等功能。这个教程将帮助你深入理解和有效地使用Shiro框架。在本文中,我们将详细探讨Shiro的核心概念、主要功能和常见用法...

    Apache Shiro 集成-spring

    Apache Shiro 是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能,可以非常轻松地开发出足够安全的应用。Shiro 不仅可以用于Java Web 应用,也可以用于独立的Java应用。在集成Spring时,Shiro ...

    shiro-root-1.3.2-source-release

    1. **认证**(Authentication):这是验证用户身份的过程,确保用户是他们声称的那个人。在Shiro中,`Subject`接口是与安全相关的操作的主要入口点,它代表了当前用户或实体。`Realm`是认证信息的来源,比如数据库、...

    shiro-root-1.4.1-source-release.zip

    Apache Shiro 是一款强大且易用的 Java 安全框架,提供身份认证、授权、加密以及会话管理功能,简化了安全实现。标题中的 "shiro-root-1.4.1-source-release.zip" 指的是 Apache Shiro 的 1.4.1 版本源码包,适用于...

    shiro最简单整合版本

    Apache Shiro 是一个强大且易用的 Java 安全框架,提供身份认证、授权、加密和会话管理功能,简化了处理安全性的工作。在本文中,我们将深入探讨 Apache Shiro 的核心概念及其最简单的整合方式。 一、Shiro 的核心...

    实际WEB项目整合 Shiro 以及 LDAP 方案.docx

    项目整合 Shiro 与 LDAP 的...用户提交登录信息后,Shiro 会使用 LDAP 进行身份校验。 3.1 配置 Shiro 首先,我们需要在 Shiro 配置文件中定义 LDAP Realm,指定 LDAP 服务器的连接参数和搜索过滤器。例如: ```xml ...

    shiro源码(shiro-root-1.10.0-source-release.zip)

    1. **认证**:Shiro 的认证过程是验证用户身份的过程。它通过`Subject`接口实现,`Subject`代表了当前“操作”的主体,可能是用户、系统进程或其他实体。`Realm`是Shiro与应用程序特定的安全数据源(如数据库、LDAP...

    apache-shiro教程完整版.7z

    1. **认证**:Shiro 提供了用户身份验证的机制,确保用户身份的真实性。这通常涉及到用户名和密码的验证。Shiro 提供了Remember Me服务,使得用户在一段时间内登录系统无需再次输入凭证。 2. **授权**:权限控制是...

    Apache-shiro使用手册

    - **定义**:Apache Shiro 是一款强大且易于使用的 Java 安全框架,它提供了包括认证、授权、密码加密和会话管理在内的多种安全服务功能。 - **特点**: - **简单性**:相较于其他安全框架,Shiro 的设计更为简洁...

    Shiro的简单示例-注释完善-含SQL

    本示例将深入讲解 Shiro 的基本配置与使用,同时结合 SQL 数据库,实现用户身份验证与权限控制。 首先,我们了解 Shiro 的核心组件: 1. **Subject**:Shiro 的核心概念,代表当前操作的用户,可以是实际用户、...

    shiro-1.3.2

    1. **认证**:这是验证用户身份的过程。Shiro提供了一个简单的API来处理登录、记住我(Remember Me)等功能。它支持多种凭证类型,如用户名/密码、数字证书等。 2. **授权**:也称为访问控制,是指确定用户是否有...

    shiro-root-1.4.0-RC2.rar

    Apache Shiro 是一个强大且易用的Java安全框架,提供了身份认证、授权、加密和会话管理功能,简化了企业级应用的安全实现。在你提供的压缩包"shiro-root-1.4.0-RC2.rar"中,包含了Apache Shiro的1.4.0-RC2版本的示例...

    Apache shiro权限控制基础配置代码

    Apache Shiro是一款强大的Java安全框架,它为应用程序提供了身份验证、授权、会话管理和加密等核心功能。在本文中,我们将深入探讨Apache Shiro的基础配置和代码实现,以帮助你理解如何有效地使用Shiro进行权限控制...

    使用Apache Shiro保护你的WEB应用

    Apache Shiro是一个强大的Java安全框架,致力于简化身份验证和授权的过程。相较于JAAS(Java Authentication and Authorization Service)和Spring Security,Shiro在提供相同的安全功能的同时,更注重易用性和灵活...

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

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

    shiro_attack_2.2.zip

    3. 如果验证成功,Shiro创建一个Subject对象并绑定已认证的用户身份。 **Shiro的授权机制** Shiro使用角色(Role)和权限(Permission)进行授权。角色是权限的集合,用户可以拥有一个或多个角色,每个角色包含一组...

    Apache Shiro使用手册 共22页.pdf

    Apache Shiro 使用手册 Apache Shiro 是一个强大易用的 Java 安全框架,提供了认证、授权、加密和会话管理等功能。Shiro 的架构主要包括三个核心组件:Subject、SecurityManager 和 Realm。 1. 认证...

    Apache_Shiro_使用手册.docx

    4. **验证实体和凭据**:Shiro 使用 Realm 从数据源中获取相关信息并进行比较。 5. **成功认证后设置会话**:如果认证成功,Subject 将进入已认证状态,同时可选地启用“记住我”功能。 Shiro 的优势在于其灵活性和...

Global site tag (gtag.js) - Google Analytics