zoukankan      html  css  js  c++  java
  • 原创: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);
          }
      }

    做产品的程序,才是好的程序员!
  • 相关阅读:
    Android 常见工具类封装
    Android Logcat 封装类
    Android 四大组件之 " Activity "
    "浅谈Android"第一篇:Android系统简介
    罗列的书单
    关于多层架构一些思考
    LeetCode 330. Patching Array
    LeetCode 315. Count of Smaller Numbers After Self(线段树,树状数组)
    LeetCode 316. Remove Duplicate Letters(贪心)
    LeetCode 327. Count of Range Sum(线段树)
  • 原文地址:https://www.cnblogs.com/asplover/p/12790734.html
Copyright © 2011-2022 走看看