原创:shiro 入门配置三步骤

shiro入门配置,

  1. 添加依赖包
  2. shiro.ini文件放在正确位置
  3. 单元测试编码

 

  1. 添加依赖包hiro核心依赖包
       <!-- shiro核心包 -->
        <dependency>
          <groupId>org.apache.shiro</groupId>
          <artifactId>shiro-core</artifactId>
          <version>1.4.0</version>
        </dependency>
  2. shiro.ini文件放在正确位置
    #对用户信息进行配置
    [users]
    #用户账号和密码
    zhangsan=123456
    lisi=654321
  3. 单元测试编码
    ShiroFirstSimple.java文件
    package com.test.shiro;
    
    import org.apache.shiro.SecurityUtils;
    import org.apache.shiro.authc.AuthenticationException;
    import org.apache.shiro.authc.UsernamePasswordToken;
    import org.apache.shiro.mgt.DefaultSecurityManager;
    import org.apache.shiro.realm.text.IniRealm;
    import org.apache.shiro.subject.Subject;
    import org.junit.Test;
    
    
    
    /**
     * Created with IntelliJ IDEA.
     * @author xiaostudy
     * Date: 2019/4/29
     * Time: 10:20
     * Description: No Description
     */
    public class ShiroFirstSimple {
    
        // 用户登录和退出
        @Test
        public void testLoginAndLogout() {
            //Shiro DefaultSecurityManager默认的安全管理器及认证原理
            DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();
    
            //IniRealm是Shiro提供一种Realm实现。用户、角色、权限等信息集中在一个.ini文件那里。
            //classpath:shiro.ini 位于src目录下,ini文件是Initialization File的缩写,即初始化文件
            IniRealm iniRealm = new IniRealm("classpath:shiro.ini");
            //把初始化域配置文件,赋值给默认安全管理器
            defaultSecurityManager.setRealm(iniRealm);
            //在 Shiro 中 SecurityUtils 是一个抽象类。并且没有任何子类。在其中声明了一个静态属性,三个静态方法。
            SecurityUtils.setSecurityManager(defaultSecurityManager);
    
            // 从SecurityUtils中创建一个subject  (org.apache.shiro.subject.Subject) 即主体
            Subject subject = SecurityUtils.getSubject();
    
            // 在认证提交前准备token(令牌)   这里的账号和密码 将来是由用户输入进去的
            UsernamePasswordToken token = new UsernamePasswordToken("zhangsan", "123456");
           // UsernamePasswordToken token = new UsernamePasswordToken("lisi", "654321");
    
            //执行认证提交
            try {
                subject.login(token);
            } catch (AuthenticationException e) {
                e.printStackTrace();
            }
    
    
            // 是否认证通过 (org.apache.shiro.authc.Authenticator) 即认证器
            boolean isAuthenticated = subject.isAuthenticated();
            System.out.println("是否认证通过:"+isAuthenticated);
            if(isAuthenticated) {
                System.out.println("subject:" + subject);
                System.out.println("用户/主体:" + subject.getPrincipal());
                System.out.println("用户会话:" + subject.getSession().getTimeout());
                System.out.println("getPrincipal().getClass(): " + subject.getPrincipal().getClass());
            }
    
            //退出操作
            subject.logout();
    
            // 是否认证通过
            isAuthenticated = subject.isAuthenticated();
            System.out.println("是否认证通过:"+isAuthenticated);
        }
    }

     


     

 

posted @ 2020-04-27 22:31  码哥之旅  阅读(362)  评论(0编辑  收藏  举报