1,Shiro提供了對Web環境的支持,其通過一個
ShiroFilter 入口來攔截需要安全控制的URL,然后進行相應的控制。
①配置的
ShiroFilter 實現類為:org.springframework.web.filter.DelegatingFilterProxy 。
②這是一個 Servlet Filter 的代理對象,它在IOC容器中去找實現了Filter接口的bean。
③它可以通過一個初始化參數"targetBeanName"來找到bean,也可以通過<filter-name>找到bean。
2,
ShiroFilter 類似於SpringMvc中的前端控制器,是安全控制的入口點,其負責讀取配置文件(如ini配置文件),然后判斷該URL是否需要登陸/授權等工作。
①在SpringIOC容器中配置org.apache.shiro.spring.web.ShiroFilterFactoryBean的時候,該bean的名稱必須要和
ShiroFilter 的<filter-name>一致。否則在服務加載的時候會報錯。因為Shiro會在IOC容器中查找和<filter-name>對應的filter bean。
下面是一個比較基本的Shiro配置內容:



3,受保護的URL如何進行配置
①[urls]部分的配置,其格式為:url=攔截器[參數],攔截器[參數]。
②如果當前請求的url匹配[urls]部分的某個url模式,將會執行器配置的攔截器。
③anon(anonymous)攔截器表示可以匿名訪問。
④authc(authencation)攔截器標識需要身份認證通過后才能訪問。
⑤logout(logout)攔截器表示登出/退出登錄,它
會清空shiro緩存信息。
⑥
url模式使用 Ant 風格模式:
[1]?匹配一個字符;
[2]*匹配零個或多個字符;
[3]**匹配路徑中的零個或多個路徑;
4,認證/授權基本步驟
①獲取當前的 Subject,調用SecurityUtils.getSubject();
②判斷當前用戶是否已經認證,調用 Subject 的 isAuthenticated();
③或沒有被認證,則把用戶名和密碼封裝為 UserNamePassworkToken 對象
[1]客戶端提交的表單數據。
[2]提交數據到SpringMVC的 handler 上。
[3]獲取用戶名和密碼。
④執行登錄,調用 Subject 的 login(AuthencationToken);
⑤自定義Realm 方法,從數據庫中獲用戶安全數據,返回給Shiro
[1]實際上需要繼承
org.apache.shiro.realm.AuthencatingRealm 類(僅僅實現認證,
org.apache.shiro.realm.AuthorizingRealm 可以用來認證和授權)。
[2]實現 doGetAuthenticationInfo(AuthenticationToken) 方法。
⑥最后由Shiro完成密碼的比對。