Shiro5-使用 Shiro 进行认证

shiro 认证流程

认证流程

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

入门程序

使用Shiro 架包搭建工程

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

构建securityManager环境步骤

创建shiro-first.ini

#对用户信息进行配置
[users]
#用户账号和密码
zhangsan=111111
lisi=22222
        // 创建securityManager工厂,通过ini配置文件创建securityManager工厂
        Factory 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.
Shiro5-使用 Shiro 进行认证_第1张图片
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异常.

Shiro5-使用 Shiro 进行认证_第2张图片
Realm 接口的实现

总结

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

Shiro5-使用 Shiro 进行认证_第3张图片

你可能感兴趣的:(Shiro5-使用 Shiro 进行认证)