通過shiro.ini實現簡單的認證、授權

1、配置ini

[users]
# 模擬登錄的用戶
zs=123456,role1
ls=123456,role2
ww=123456,role3
[roles]
# 模擬用戶角色
role1=user:q,user:c,user:a,user:d
role2=user:q,user:a
role3=user:q

2、jar包

<project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <groupId>com.sxt.shiro</groupId>
     <artifactId>01_shiro_Authentication_ini</artifactId>
     <version>1.0</version>
 
     <!-- 版本號 -->
     <properties>
          <shiro.version>1.4.2</shiro.version>
          <logging.version>1.2</logging.version>
     </properties>
 
     <dependencies>
          <!-- 依賴shiro -->
          <dependency>
               <groupId>org.apache.shiro</groupId>
               <artifactId>shiro-core</artifactId>
               <version>${shiro.version}</version>
          </dependency>
         
          <dependency>
               <groupId>commons-logging</groupId>
               <artifactId>commons-logging</artifactId>
               <version>${logging.version}</version>
          </dependency>
     </dependencies>
 
</project>

代碼實現

  public static void main(String[] args) {
        String username = "zs";
        String pwd = "123456";

//        得到Factory
        Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
//        通過Factory得到SecurityManager
        SecurityManager securityManager = factory.getInstance();
//        把securityManager設置到當前線程
        SecurityUtils.setSecurityManager(securityManager);
//        得到Subject對象
        Subject subject = SecurityUtils.getSubject();
//        進行登陸驗證
        try{
            AuthenticationToken token = new UsernamePasswordToken(username,pwd);
            subject.login(token);
            System.out.println(username+" 是否登錄成功:"+subject.isAuthenticated());
        }catch (AuthenticationException e){
            System.out.println("賬號或密碼錯誤!");
        }

//      進行認證相關操作
//        hasRole:判斷當前用戶是否含擁有指定角色,返回boolean
        boolean b1 = subject.hasRole("role1");
        System.out.println(username + " 是否擁有 role1 角色:"+b1);
//        hasRoles:分別判斷用戶是否具有List中每個內容,返回boolean[]
        boolean[] b2 = subject.hasRoles(Arrays.asList(new String[]{"role1","role2","role3"}));
        System.out.println(username + " 是否分別擁有 role1,role2,role3 角色:"+Arrays.toString(b2));
//        hasAllRoles:判斷當前用戶是否同時擁有 role1,role2,role3 角色,返回boolean
        boolean b3 = subject.hasAllRoles(Arrays.asList(new String[]{"role1","role2","role3"}));
        System.out.println(username + " 是否同時擁有 role1,role2,role3 角色:"+b3);
//        isPermitted:判斷用戶是否擁有該權限,返回boolean
        boolean permitted = subject.isPermitted("user:q");
        System.out.println(username + " 是否擁有 user:q 權限:"+permitted);

    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章