shiro入門

shiro筆記

加入依賴:

<dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-core</artifactId>
    <version>1.4.0</version>
</dependency>
<dependency>  
    <groupId>commons-logging</groupId>  
    <artifactId>commons-logging</artifactId>  
    <version>1.2</version>  
</dependency>


十分鐘入門

public static void main(String[] args) {
//從ini中讀取權限信息構建SecurityManager對象
Factory<org.apache.shiro.mgt.SecurityManager> factory = new IniSecurityManagerFactory("classpath:my.ini");  
        org.apache.shiro.mgt.SecurityManager securityManager = (org.apache.shiro.mgt.SecurityManager)factory.getInstance();  
        SecurityUtils.setSecurityManager(securityManager);  
//獲取當前用戶
Subject currentUser = SecurityUtils.getSubject();
//當前用戶的回話
Session session = currentUser.getSession();
//判斷是否登錄 未登錄才需要登錄
/**  
         * 用戶包括兩部分   
         *    principals and credentials  
         *     principals(本人)表示用戶的標識信息 比如用戶名 用戶地址等  
         *     credentials(憑證)表示用戶用於登錄的憑證 比如密碼 證書等  
         */  
if ( !currentUser.isAuthenticated() ) {
UsernamePasswordToken token = new UsernamePasswordToken("jiaozi", "123456");
//設置記住密碼
token.setRememberMe(true);
try {
    currentUser.login( token );
    System.out.println("登錄成功");
    System.out.println(currentUser.isAuthenticated());
    System.out.println(currentUser.isRemembered());
    //檢查登錄後的用戶是否擁有某個角色
    if(currentUser.hasRole("role1")){
    	System.out.println("是否擁有role1的角色 ");
    }
    if(currentUser.isPermitted("user:query:1")){
    	System.out.println("擁有查詢1號的權限");
    }
} catch ( UnknownAccountException uae ) {
    System.out.println("賬號錯誤");
} catch ( IncorrectCredentialsException ice ) {
    System.out.println("密碼不匹配");
} catch ( LockedAccountException lae ) {
   System.out.println("賬號被鎖定");
} catch ( AuthenticationException ae ) {
    System.out.println("位置異常");
}
}
}
}


Ini配置:

1. # =======================  

2. # Shiro INI configuration  

3. # =======================  

4.   

5. [main]  

6.   

7. [users]  

8. # 設置用戶信息  

9. # 語法是 username = password, roleName1, roleName2, …, roleNameN  

10. jiaozi = 123456,role1  

11.   

12. [roles]  

13. # 角色信息和角色擁有的權限  

14. #語法是 rolename = permissionDefinition1, permissionDefinition2, …, permissionDefinitionN  

15. #權限的語法 * 表示所有權限  一般語法是 權限類型.權限動作.權限的資源id  比如  user:delete:1 表示擁有刪除1號用戶的權限  user:delete:*表示刪除所有用戶權限  

16. admin = *  

17. role1 = user:query:*, user:delete:1  

18.   

19. [urls]  

20. # web中的url過濾  

 

加入web程序:

加入依賴:

<dependency>  
    <groupId>org.apache.shiro</groupId>  
    <artifactId>shiro-web</artifactId>  
    <version>1.4.0</version>  
</dependency>


web.xml添加shiro支持的過濾器和ini文件路徑配置參數

1. <context-param>  

2.     <param-name>shiroConfigLocations</param-name>  

3.     <param-value>/WEB-INF/shiro.ini</param-value>  

4.   </context-param>  

5.   <listener>  

6.     <listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class>  

7.   </listener>  

8.   <filter>  

9.     <filter-name>ShiroFilter</filter-name>  

10.     <filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>  

11.   </filter>  

12.   <filter-mapping>  

13.     <filter-name>ShiroFilter</filter-name>  

14.     <url-pattern>/*</url-pattern>  

15.     <dispatcher>REQUEST</dispatcher>  

16.     <dispatcher>FORWARD</dispatcher>  

17.     <dispatcher>INCLUDE</dispatcher>  

18.     <dispatcher>ERROR</dispatcher>  

19.   </filter-mapping>  

登錄頁面:

<form action="LoginServlet" method="post">  
    	 用戶名 :<input type="text" name="userName"/>  
  	 密碼:<input type="text" name="password"/>  
   	<input type="submit">  
  </form>  


配置ini:

[main]
#當登陸不成功是自動跳轉到登陸頁面  
authc.loginUrl=/login.html
#認證(輸入用戶名和密碼登錄)不通過  自動跳轉loginUrl
roles.loginUrl=/login.html
#授權(沒有某個角色和權限) 不通過
roles.unauthorizedUrl=/un.html
perms.loginUrl=/login.html
perms.unauthorizedUrl=/un.html
[users]  
# 設置用戶信息  
# 語法是 username = password, roleName1, roleName2, …, roleNameN  
jiaozi = 123456,role1  
  
[roles]  
# 角色信息和角色擁有的權限  
#語法是 rolename = permissionDefinition1, permissionDefinition2, …, permissionDefinitionN  
#權限的語法 * 表示所有權限  一般語法是 權限類型.權限動作.權限的資源id  比如  user:delete:1 表示擁有刪除1號用戶的權限  user:delete:*表示刪除所有用戶權限  
admin = *  
role1 = user:query:*, user:delete:1  
  
[urls]  
# web中的url過濾  訪問這個頁面時 要求你登錄的賬號  必須擁有某些權限
/login.html = anon
/scu.jsp = perms[user:delete:2]


 

發佈了102 篇原創文章 · 獲贊 13 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章