美文网首页
从零开始学 Shiro 01 - 认证

从零开始学 Shiro 01 - 认证

作者: 一份执着_ | 来源:发表于2019-05-08 09:45 被阅读0次

    认证在 Shiro 中被称为 Authentication,用来验证用户是不是拥有相应的身份,也可以理解为登陆时校验登陆凭证的过程。

    首先需要导包,这里我们通过 maven 坐标的方式进行引用, 导入 shrio 和 junit 的包:

    <dependency>
        <groupId>org.apache.shiro</groupId>
        <artifactId>shiro-all</artifactId>
        <version>1.4.0</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
    

    然后创建一个测试类来简单认识一下 Shiro 的认证流程:

    import org.apache.shiro.SecurityUtils;
    import org.apache.shiro.authc.UsernamePasswordToken;
    import org.apache.shiro.mgt.DefaultSecurityManager;
    import org.apache.shiro.realm.SimpleAccountRealm;
    import org.apache.shiro.subject.Subject;
    import org.junit.Before;
    import org.junit.Test;
    
    public class AuthenticateTest {
        // 创建一个 Realm
        private SimpleAccountRealm simpleAccountRealm = new SimpleAccountRealm();
    
        /**
         * 为 Realm 添加一个账户
         */
        @Before
        public void before() {
            simpleAccountRealm.addAccount("zhao", "123456");
        }
    
    
        /**
         * 测试用户认证(登陆)
         */
        @Test
        public void testAuthenticate() {
            // 构建 SecurityManager 环境
            DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();
    
            // 为 SecurityManager 设置 Realm
            defaultSecurityManager.setRealm(simpleAccountRealm);
    
            // 将 SecurityManager 放入 SecurityUtils 这个工具类中
            SecurityUtils.setSecurityManager(defaultSecurityManager);
    
            // 获取一个 Subject
            Subject subject = SecurityUtils.getSubject();
    
            // 创建一个账号密码, 在 web 应用中一般为表单上填写并传入后台.
            UsernamePasswordToken token = new UsernamePasswordToken("zhao", "123456");
    
            // 进行登陆操作
            subject.login(token);
    
            // 验证是否为登陆状态
            System.out.println("是否登陆: " + subject.isAuthenticated());
        }
    }
    

    登陆成功的话,subject.isAuthenticated()会返回 true

    登陆失败的话,会抛出相应的异常,如:

    UnknownAccountException             # 未知账户/没找到帐号
    IncorrectCredentialsException       # 错误的凭证(密码)异常
    

    本章代码地址 : https://github.com/zhaojun1998/Premission-Study/tree/master/Permission-Shiro-01/

    相关文章

      网友评论

          本文标题:从零开始学 Shiro 01 - 认证

          本文链接:https://www.haomeiwen.com/subject/bwbpoqtx.html