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;