Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Shiro Review——使用ini文件進行授權測試

Shiro Review——使用ini文件進行授權測試

編輯:關於Android編程

一,shiro授權

 

授權流程:

\

跟用戶的認證流程類似,shrio在用戶授權的時候,最後還是去Realm獲取信息。

 

shiro的三種授權方式:

 

Shiro 支持三種方式的授權:

  • 編程式:通過寫if/else 授權代碼塊完成:

Subject subject = SecurityUtils.getSubject();

if(subject.hasRole(“admin”)) {

//有權限

} else {

//無權限

}

  • 注解式:通過在執行的Java方法上放置相應的注解完成:

@RequiresRoles("admin")

public void hello() {

//有權限

}

  • JSP/GSP 標簽:在JSP/GSP 頁面通過相應的標簽完成:

 


二,代碼測試shrio授權

 

首先編寫ini文件:

 

 

#用戶
[users]
#用戶zhang的密碼是123,此用戶具有role1和role2兩個角色
zhangsan=123,role1,role2

#權限
[roles]
#角色role1對資源user擁有create、update權限
role1=user:create,user:update
#角色role2對資源user擁有create、delete權限
role2=user:create,user:delete
#角色role3對資源user擁有create權限
role3=user:create

 

 

 

權限標識符號規則:資源:操作:實例(中間使用半角:分隔)

user:create:01 表示對用戶資源的01實例進行create操作。

user:create:表示對用戶資源進行create操作,相當於user:create:*,對所有用戶資源實例進行create操作。

例如,user:*:01 表示對用戶資源實例01進行所有操作。

 

 

授權測試代碼:

 

 

/**
 * 授權測試
 * @author LiuHuiChao
 *
 */
public class AuthorizationTest {

	//角色授權,資源授權
	@Test
	public void  testAuthorization(){
		//創建SecurityManager工廠
		Factory factory=new IniSecurityManagerFactory("classpath:shiro-permission.ini");
		//創建SecurityManager
		SecurityManager securityManager=factory.getInstance();
		//將SecurityManager設置到系統運行環境,和spring整合後將SecurityManager配置到spring容器中
		SecurityUtils.setSecurityManager(securityManager);
		//創建subject
		Subject subject=SecurityUtils.getSubject();
		//執行認證
		UsernamePasswordToken token=new UsernamePasswordToken("zhangsan","123");
		try {
			subject.login(token);
		} catch (AuthenticationException e) {
			e.printStackTrace();
		}
		System.out.println("認證狀態:"+subject.isAuthenticated());
		
		//認證通過後執行授權
		/*基於角色的授權*/
		boolean IsHasRole=subject.hasRole("role1");
		System.out.println("是否有role1權限:"+IsHasRole);
		//判斷是否擁有多個角色
		boolean hasAllRoles=subject.hasAllRoles(Arrays.asList("role1","role2"));
		System.out.println("是否擁有所有角色([role1],[role2]):"+hasAllRoles);
		
		//使用check方法進行授權,如果授權不通過,拋出異常
		try {
			subject.checkRole("role12");
		} catch (AuthorizationException e) {
			System.out.println("用戶沒有role12角色");
			e.printStackTrace();
		}
		
		/*基於資源的授權*/
		boolean isPermitted=subject.isPermitted("user:create:1");
		System.out.println("是否有user:create權限:"+isPermitted);
		boolean isPremittedAll=subject.isPermittedAll("user:create","user:delete");	
		System.out.println("是否有user:create,user:delete權限:"+isPermitted);
		
		//使用無返回值的check
		try {
			subject.checkPermission("user:post");
		} catch (AuthorizationException e) {
			System.out.println("用戶沒有user:post權限");
			e.printStackTrace();
		}
	}
}


 

注意,只需在用戶認證代碼的基礎上接著加就ok了,這樣就完成了簡單的用戶認證+授權。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved