`

Shiro是如何加载相应的Realm的?

 
阅读更多

最近项目中用到了Shiro框架,Realm是具体实现业务逻辑的类,那么Shiro是如何加载相应的Realm呢?

跟踪源码发现

在ModularRealmAuthenticator.doMultiRealmAuthentication()方法中
下面代码用来加载相应的Realm
  for (Realm realm : realms) {
            aggregate = strategy.beforeAttempt(realm, token, aggregate);
            if (realm.supports(token)) {
                log.trace("Attempting to authenticate token [{}] using realm [{}]", token, realm);
                AuthenticationInfo info = null;
                Throwable t = null;
                try {
                    info = realm.getAuthenticationInfo(token);
                } catch (Throwable throwable) {
                    t = throwable;
                    if (log.isDebugEnabled()) {
                        String msg = "Realm [" + realm + "] threw an exception during a multi-realm authentication attempt:";
                        log.debug(msg, t);
                    }
                }
 
                aggregate = strategy.afterAttempt(realm, token, info, aggregate, t);
 
            } else {
                log.debug("Realm [{}] does not support token {}.  Skipping realm.", realm, token);
            }
        }
根据 realm.supports(token)方法来判断当前的令牌信息对应的Realm.
在 基类AuthenticatingRealm中
public boolean supports(AuthenticationToken token) {
        return token != null && getAuthenticationTokenClass().isAssignableFrom(token.getClass());
    }
也就是每个 Realm只要覆盖getAuthenticationTokenClass()方法来支持相应的Token类.
 public Class getAuthenticationTokenClass() {
        return authenticationTokenClass;
    }
分享到:
评论

相关推荐

    shiro-realm案例

    在自定义Realm的过程中,通常还需要配置相应的Service和DAO,以便与数据库进行交互。在`shiro.web`这个项目中,我们可以看到Web应用的相关配置,可能包括了Spring MVC的Controller、Service和DAO,以及与Shiro相关的...

    shiro权限框架自定义Realm示例

    确保在应用程序启动后,Shiro能够正确地加载和使用这个自定义Realm。 5. ** 测试和调试**:创建一个测试用例,模拟登录过程并检查用户是否能成功登录以及其权限是否被正确地授予。如果遇到问题,可以使用Shiro的...

    shiro授权 shiro和企业项目整合开发

    3. **Web 应用集成**:如果项目是 Web 应用,可以通过 Filter 集成 Shiro,比如使用 `ShiroFilter`,并配置相应的拦截规则。 4. **Spring 整合**:对于 Spring 项目,可以利用 Spring 的 AOP 功能,通过 `@...

    shiro权限案例demo

    例如,`shiro-filter.xml`配置文件中定义了哪些URL需要进行权限校验,以及相应的处理方式。 总结起来,这个"shiro权限案例demo"是一个全面展示如何使用Apache Shiro实现在Java应用程序中进行用户权限管理的实例。它...

    shiro认证及授权demo

    这个"shiro认证及授权demo"应该包含了设置Shiro环境、配置 Realm、创建 SecurityManager、定义用户角色和权限以及处理登录、登出等核心功能的示例代码。 1. **Shiro环境设置**:首先,需要在项目中引入Shiro的依赖...

    shiro-demo_DEMO_shiro_shriodemo_shiro框架demo_shiro前后端分离_

    - **Filters**:Shiro 提供了一系列过滤器,如 `authc`(认证过滤器)、`perms`(权限过滤器)等,用于拦截请求并执行相应的安全逻辑。 **4. 示例项目中的关键组件** - **Web 应用**:可能使用 Spring Boot 集成 ...

    shiro所需要的4个jar包

    如果你的应用需要缓存用户会话或者权限信息,你可能需要添加相应的缓存库,如`ehcache.jar`,并配置Shiro来使用它。 在实际开发中,为了简化依赖管理,你可能会使用Maven或Gradle等构建工具,通过引入Shiro的相关...

    shiro实现不同身份使用不同Realm进行验证.pdf

    最后,需要在 Shiro 配置中使用这个自定义的 Authenticator,并为每个 Realm 分别配置好相应的用户和权限数据。 通过这种方式,我们实现了不同的身份使用不同的 Realm 进行验证,确保了普通用户和管理员登录的分离...

    shiro与spring整合

    在 `applicationContext.xml` 文件中,可以创建 Shiro 的 SecurityManager 和 Realm 的 Bean,然后通过 Spring 的依赖注入将它们关联起来。例如,使用 `<bean>` 标签定义 Realm 并注入到 SecurityManager 中,确保 ...

    shiro整合ssm的全部jar包

    配置Ehcache,我们需要在Shiro的配置文件中指定相应的缓存策略,确保缓存的有效性和过期策略。 接下来是`quartz-1.6.1`,Quartz是一个开源的作业调度框架,用于在Java应用中安排任务执行。在Shiro的集成中,虽然...

    ShiroDemo权限管理例子

    5. **Web集成**:Shiro可以直接与Web应用结合,提供过滤器实现基于URL的安全控制,如`shiroFilter`,它可以根据配置拦截用户请求并进行相应的权限检查。 6. **测试**:Shiro提供了一些测试工具,方便开发者在单元...

    shiro管理多登录入口配置,手机端登录与网页端登录

    总的来说,实现"shiro管理多登录入口配置,手机端登录与网页端登录"需要对 Shiro 的 Realm、过滤器和配置有深入理解,以及根据应用场景定制相应的登录验证流程。正确配置后,Shiro 可以有效地管理和保护不同入口的...

    shiro的基本使用

    `shiroFilter` 在 `web.xml` 中配置,负责拦截请求并执行相应的安全操作。 3. **控制器和视图**:在示例应用中,可能存在登录、登出、权限检查等功能的控制器方法。视图可能显示登录表单、错误消息、受保护的页面等...

    SpringBoot整合Shiro,实现从数据库加载权限、权限的动态更新、Session共享

    本教程将详细讲解如何在SpringBoot应用中集成Shiro,以实现从数据库加载权限、权限的动态更新以及Session共享。 首先,让我们了解SpringBoot和Shiro的基本概念。SpringBoot是Spring框架的简化版,它提供了开箱即用...

    shiro_spring_velocity整合

    Realm 是 Shiro 与应用程序数据源交互的接口,你可以自定义 Realm 类,如 `AuthRealm`,实现认证和授权功能。此外,可以通过 `lifecycle` 和动态代理(如 CGLIB)来控制 Realm 的生命周期。 4. **密码加密** Shiro...

    shiro所有jar包

    7. **其他扩展模块**:Shiro还有许多其他的扩展模块,如shiro-quartz.jar(Quartz作业调度集成)、shiro-jaxrs.jar(JAX-RS支持)等,根据项目需求选择相应的jar包。 集成Shiro到Spring的步骤通常包括: 1. **配置...

    Shiro权限框架深入浅出.pdf

    Shiro的认证流程分为几个步骤,包括创建Maven项目并导入Shiro的坐标依赖,定义自定义的Realm,编写ini配置文件关联Realm和SecurityManager,最后是编写Shiro的认证流程代码。在Shiro中,Subject代表当前与软件交互的...

    springboot+shiro.zip

    在这个"springboot+shiro.zip"压缩包中,很可能是包含了上述步骤的代码实现,包括SpringBoot的启动类、Shiro的配置类、 Realm实现、控制器以及可能的数据库脚本。通过解压并研究这些文件,开发者可以学习到如何在...

    Shiro应用实例1

    - **ShiroFilter**:Shiro的核心过滤器,拦截请求并调用相应的安全逻辑。 虽然这个实例没有具体的代码实现,但我们可以通过以下步骤了解如何在Shiro中添加安全控制: 1. **创建Shiro配置**:编写`shiro.ini`文件,...

Global site tag (gtag.js) - Google Analytics