shiro權限控制入門

  1 一:權限控制兩種主要方式
  2     粗粒度 URL 級別權限控制和細粒度方法級別權限控制
  3     1.粗粒度 URL 級別權限控制
  4         能夠基於 Filter 實如今數據庫中存放 用戶、權限、訪問 URL 對應關係, 當前用戶訪問一個 URL 地址,查
  5         詢數據庫判斷用戶當前具備權限,是否包含這個 URL,若是包含容許訪問,若是不包含權限不足
  6     2.粗粒度 URL 級別權限控制和
  7         能夠代理、自定義註解實現, 訪問目標對象方法,在方法上添加權限註解信息,對目標對象建立代理對象,
  8         訪問真實對象先訪問代理對象,在代理對象查詢數據庫判斷是否具備註解上描述須要權限,具備權限 容許訪問,
  9         不具備權限,攔截訪問,提示權限不足
 10 二:權限控制相關數據表
 11     實體 : 用戶、角色、權限(他們之間都是多對多的關係)
 12     用戶: 系統登陸用戶 User
 13     權限: 描述權限信息 (粗粒度權限控制,可能在權限表描述訪問資源 URL 信息)
 14     Permission
 15     角色: 方便用戶進行受權, 角色就是權限的集合 Role
 16     用戶 *---* 角色 *---* 權限 ==> 創建 至少5 張數據表
 17     Menu 菜單, 爲了方便進行動態菜單管理 , 爲不一樣用戶定製不一樣系統菜單
 18     不一樣用戶系統菜單,能夠根據用戶角色 進行管理 角色 * --- * 菜單
 19 三:創建實體類建立對應的數據庫表
 20 四:ApacheShiro  框架入門
 21     1.Apache Shiro框架簡介和下載導入
 22         官網: http://shiro.apache.org/
 23     2.Apache Shiro 體系結構
 24         2.1Authentication 認證 ---- 用戶登陸,身份識別 who are you?
 25         2.2Authorization 受權 --- 用戶具備哪些權限、角色 what can you do ?
 26         2.3Cryptography 安全數據加密
 27         2.4Session Management 會話管理
 28         2.5Web Integration web 系統集成
 29         2.6Interations 集成其它應用,spring、緩存框架
 30     3.導入對應的jar包
 31         <!-- 權限控制 框架 -->
 32         <dependency>
 33             <groupId>org.apache.shiro</groupId>
 34             <artifactId>shiro-all</artifactId>
 35             <version>${shiro.version}</version>
 36         </dependency>
 37     4.參考官方文檔:Apache_Shiro_reference(中文版).pdf
 38     5.Apache Shiro執行過程分析和權限控制主要方式
 39         5.1Shiro運行主要運行流程:
 40             ApplicationCode 用戶編寫代碼
 41             Subject 就是 shiro 管理的用戶
 42             SecurityManager 安全管理器,是 shiro 權限控制核心對象, 在編程時,只須要操做
 43             Subject 方法, 底層調用 SecurityManager 方法,無需直接編程操做 SecurityManager
 44             Realm 應用程序和安全數據之間鏈接器 ,應用程序 進行權限控制讀取安全數據(數據
 45             表、文件、網路 … ),經過 Realm 對象完成
 46             登陸流程: 應用程序 --- Subject --- SecurityManager --- Realm --- 安全數據
 47         5.2Shiro進行權限控制
 48             四種主要方式 :
 49             1、 在程序中 經過 Subject 編程方式進行權限控制
 50             2、 配置 Filter 實現 URL 級別粗粒度權限控制
 51             3、 配置代理,基於註解實現細粒度權限控制
 52             4、 在頁面中使用 shiro 自定義標籤實現 頁面顯示權限控制
 53     6.用戶登陸功能的實現
 54         6.1配置shiro的Filter實現URL級別權限控制
 55             6.1.1配置web.xml
 56                 <!-- shiro的Filter  -->
 57                 <filter> 
 58                     <!-- 去spring配置文件中尋找同名bean  -->
 59                     <filter-name>shiroFilter</filter-name>
 60                     <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
 61                 </filter>
 62                 <filter-mapping>
 63                     <filter-name>shiroFilter</filter-name>
 64                     <url-pattern>/*</url-pattern>
 65                 </filter-mapping>
 66             6.1.2配置applicationContext-shiro.xml
 67                 <!-- 配置Shiro核心Filter  --> 
 68                 <bean id="shiroFilter" 
 69                     class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
 70                     <!-- 安全管理器 -->
 71                     <property name="securityManager" ref="securityManager" />
 72                     <!-- 未認證,跳轉到哪一個頁面  -->
 73                     <property name="loginUrl" value="/login.html" />
 74                     <!-- 登陸頁面頁面 -->
 75                     <property name="successUrl" value="/index.html" />
 76                     <!-- 認證後,沒有權限跳轉頁面 -->
 77                     <property name="unauthorizedUrl" value="/unauthorized.html" />
 78                     <!-- shiro URL控制過濾器規則  -->
 79                     <property name="filterChainDefinitions">
 80                         <value>
 81                             /login.html* = anon
 82                             /user_login.action* = anon 
 83                             /validatecode.jsp* = anon
 84                             /css/** = anon
 85                             /js/** = anon
 86                             /images/** = anon
 87                             /services/** = anon 
 88                             /pages/base/courier.html* = perms[courier:list]
 89                             /pages/base/area.html* = roles[base]
 90                             /** = authc
 91                         </value>
 92                     </property>
 93                 </bean>
 94                 <!-- 安全管理器  -->
 95                 <bean id="securityManager" 
 96                     class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
 97                     <property name="realm" ref="bosRealm" />
 98                 </bean>
 99                 <bean id="lifecycleBeanPostProcessor"
100                     class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>
101         6.2過濾器的參考配置
102             anon 未認證能夠訪問
103             authc 認證後能夠訪問
104             perms 須要特定權限才能訪問
105             roles 須要特定角色才能訪問
106             user 須要特定用戶才能訪問
107             port 須要特定端口才能訪問
108             reset 根據指定 HTTP 請求訪問才能訪問
109         6.3用戶登陸(認證)功能實現(代碼編寫)
110             編寫 UserAction 提供 login 登陸方法
111             建立subject對象-->建立token對象用來保存用戶輸入的數據-->調用subject對象的login方法實現認證登陸成功
112             編寫realm類提供shiro的認證管理(doGetAuthenticationInfo)
113             和受權管理(doGetAuthorizationInfo)(讓其繼承extends AuthorizingRealm便可實現)
114             認證管理:將token轉換爲UsernamePasswordToken-->接着從token中獲取當前登陸用戶的用戶名和密碼
115             -->根據用戶的用戶名查詢數據庫,獲取用戶對象(判斷是否存在在數據庫中)-->不存在retuurn null、
116             存在return new SimpleAuthenticationInfo(user, user.getPassword(),getName());-->交由securityManager處理
117             受權管理:建立SimpleAuthorizationInfo受權對象-->獲取當前的用戶對象(利用subject.getPrincipal();)
118             -->查詢當前用戶的全部角色和權限(經過數據jpa獲取)-->獲取到的用戶角色和權限信息
119             添加到SimpleAuthorizationInfo受權對象中而且返回交由securityManager處理具體的受權模塊
120         6.4用戶註銷功能實現
121             只需調用subject的logout()方法便可註銷當前登陸用戶保存在shiro的簽名信息中的數據
122     7.細粒度的基於method的註解式權限管理的實現和jsp頁面控制權限菜單的顯示參考www.baidu.com;
相關文章
相關標籤/搜索