之前說了權限認證,其實也就是登錄驗證身份
這次來說說shiro的授權
shiro可以針對角色授權,或者訪問資源授權
兩者都行,但是在如今的復雜系統中,當然使用後者,如果你是小系統或者私活的話,前者即可,甚至可以不用,我懂的
好吧,上代碼:
首先新建一個ini,登陸信息以及權限配置好
1 #用戶 2 [users] 3 #eric 用戶nathan的密碼是123456,擁有boss以及hr兩個權限 4 eric=123456,boss,hr 5 merry=123456,hr 6 7 #權限 8 [roles] 9 #角色對用資源user來說擁有create以及update權限 10 boss=user:create,user:update 11 #角色對用資源user來說擁有create以及delete權限 12 hr=user:create,user:delete 13 #角色對用資源user來說擁有create權限 14 tl=user:create
以下代碼先登陸,後授權,分為角色以及資源
1 @Test 2 public void testAuthorization() { 3 4 // 創建SecurityManager工廠 5 Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro/shiro-permission.ini"); 6 // 創建SecurityManager 7 SecurityManager securityManager = factory.getInstance(); 8 // 將SecurityManager設置到系統運行環境,和spring後將SecurityManager配置spring容器中,一般單例管理 9 SecurityUtils.setSecurityManager(securityManager); 10 // 創建subject 11 Subject subject = SecurityUtils.getSubject(); 12 // 創建token令牌 13 UsernamePasswordToken token = new UsernamePasswordToken("eric", "123456"); 14 // 執行認證 15 try { 16 subject.login(token); 17 } catch (AuthenticationException e) { 18 e.printStackTrace(); 19 } 20 System.out.println("認證狀態:" + subject.isAuthenticated()); 21 // 認證通過後執行授權 22 23 // 基於角色的授權 24 // hasRole傳入角色標識 25 boolean ishasRole = subject.hasRole("hr"); 26 System.out.println("單個角色判斷" + ishasRole); 27 // hasAllRoles是否擁有多個角色 28 boolean hasAllRoles = subject.hasAllRoles(Arrays.asList("boss", "hr", "tl")); 29 System.out.println("多個角色判斷" + hasAllRoles); 30 31 // 使用check方法進行授權,如果授權不通過會拋出異常 32 // subject.checkRole("employee"); 33 34 // 基於資源的授權 35 // isPermitted傳入權限標識符 36 boolean isPermitted = subject.isPermitted("user:create:1"); 37 System.out.println("單個權限判斷" + isPermitted); 38 39 boolean isPermittedAll = subject.isPermittedAll("user:create:1", 40 "user:delete"); 41 System.out.println("多個權限判斷" + isPermittedAll); 42 43 // 使用check方法進行授權,如果授權不通過會拋出異常 44 subject.checkPermission("items:create:1"); 45 46 }
這些都是簡單的配置
過後會講講如何配合springmvc spring 以及mybatis進行動態認證授權