Shiro5-使用 Shiro 进行认证

shiro 认证流程

认证流程

从上面流程可以看出最重要的就是 Authenticator 和 Realm.

入门程序

使用Shiro 架包搭建工程

注:这里暂时没用到 Spring Hibernate 等架包.

构建securityManager环境步骤

创建shiro-first.ini

#对用户信息进行配置
[users]
#用户账号和密码
zhangsan=111111
lisi=22222
        // 创建securityManager工厂,通过ini配置文件创建securityManager工厂
        Factory<SecurityManager> factory = new IniSecurityManagerFactory(
                "classpath:shiro-first.ini");

        // 创建SecurityManager
        SecurityManager securityManager = factory.getInstance();

        // 将securityManager设置当前的运行环境中
        SecurityUtils.setSecurityManager(securityManager);

        // 从SecurityUtils里边创建一个subject
        Subject subject = SecurityUtils.getSubject();

        // 在认证提交前准备token(令牌)
        // 这里的账号和密码 将来是由用户输入进去
        UsernamePasswordToken token = new UsernamePasswordToken("zhangsan",
                "111111");

        try {
            // 执行认证提交
            subject.login(token);
        } catch (AuthenticationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        // 是否认证通过
        boolean isAuthenticated = subject.isAuthenticated();

        System.out.println("是否认证通过:" + isAuthenticated);

        // 退出操作
        subject.logout();

        // 是否认证通过
        isAuthenticated = subject.isAuthenticated();

        System.out.println("是否认证通过:" + isAuthenticated);

程序执行流程

  1. 通过 ini 配置文件创建SecurityManager
  2. 调用 subject.login() 方法提交认证.
    内部通过 SecurityManager 进行认证,在SecurityManager进行认证的时候会调用 Authenticator 接口的实现类 RealmSecurityManager.
Authenticator 接口实现类

3.然后 RealmSecurityManager 再去调用 ModularRealmAuthenticator 进行认证.认证时 ModularRealmAuthenticator 会拿着用户输入的 token 和 shiro-first.ini 中配置的用户账号和密码进行对比.

4.如何对比呢?
ModularRealmAuthenticator 会调用 Realm 接口的实现类 IniRealm, IniRealm 负责从 shiro-first.ini 中查询用户信息(账号和密码), 如果找不到账号会返回 null, 如果找到账号,则会将账号和密码返回.
ModularRealmAuthenticator 会判断 IniRealm 返回的信息,如果为 null 则跑出 org.apache.shiro.authc.UnknownAccountException异常.
如果密码输出错,则跑出org.apache.shiro.authc.IncorrectCredentialsException异常.

Realm 接口的实现

总结

IniRealm: 读取 ini 配置文件, 将来要连接数据,那么就需要仿照此类来读取数据库的账号和密码.
RealmSecurityManager: 用来判断Realm找到的用户名和密码是否匹配, 或是否找到用户.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 文章转载自:http://blog.csdn.net/w1196726224/article/details/53...
    wangzaiplus阅读 3,412评论 0 3
  • 身份验证,即在应用中谁能证明他就是他本人。一般提供如他们的身份ID一些标识信息来表明他就是他本人,如提供身份证,用...
    小孩真笨阅读 547评论 0 0
  • 一:基础概念 什么是权限管理 权限管理包括用户身份认证和授权两部分,简称认证授权。对于需要访问控制的资源用户首先经...
    QGUOFENG阅读 571评论 0 0
  • 现如今,人工智能对于我们已经不是一个新的概念了。 其实,人工智能已经有很长的发展时间了。在20年前...
    Mrsunny阅读 1,724评论 0 3
  • 常兴隆:高考语文138分夺分方案 每周推荐阅读:(大家还有什么想要的,请留言告诉小编,小编会尽量满足大家的要求哦!...
    镜像记忆常兴隆阅读 279评论 0 0