
Shiro提供了與Web內建的支援,其通過一個<code>ShiroFilter</code>入口來攔截需要安全控制的URL,然後進行相應的控制,ShiroFilter類似于如Strut2/SpringMVC這種web架構的前端控制器,其是安全控制的入口點,其負責讀取配置(如ini配置檔案),然後判斷URL是否需要登入/權限等工作。
而要在Spring中使用<code>Shiro</code>的話,可在<code>web.xml</code>中配置一個<code>DelegatingFilterProxy</code>,<code>DelegatingFilterProxy</code>作用是自動到<code>Spring</code>容器查找名字為<code>shiroFilter</code>(<code>filter-name</code>)的<code>bean</code>并把所有<code>Filter</code>的操作委托給它。
前端發起的所有請求都會被ShiroFilter攔截到,通路時,如果有權限或者允許匿名通路,則可以直接通路,否則将會被重定向到 loginUrl(即通路到受保護的url并且沒有權限)。
1、在web.xml配置檔案中添加DelegatingFilterProxy攔截器:
2、在Spring配置檔案中配置ShiroFilterFactoryBean:
注意:
id必須和web.xml檔案中配置的<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>名稱一緻。
filterChainDefinitions 詳解: 配置哪些頁面需要受保護,以及通路這些頁面需要的權限,主要包括以下權限:
anon 可以被匿名通路(即不需要登入就可以通路)
authc 必須認證(即登入)後才可能通路的頁面
logout 登出
roles 角色過濾器
1、url 模式使用 Ant 風格模式
2、Ant 路徑通配符支援 ?、 * 、 **,注意通配符比對不 包括目錄分隔符“/”:
?:比對一個字元,如 /admin? 将比對 /admin1,但不 比對 /admin 或 /admin/;
*:比對零個或多個字元串,如 /admin 将比對 /admin、 /admin123,但不比對 /admin/1;
**:比對路徑中的零個或多個路徑,如 /admin/** 将匹 配 /admin/a 或 /admin/a/b
URL 權限采取第一次比對優先的方式,即從頭開始 使用第一個比對的 url 模式對應的攔截器鍊。 如:
/bb/**=filter1
/bb/aa=filter2
/**=filter3
如果請求的url是“/bb/aa”,因為按照聲明順序進行匹 配,那麼将使用 filter1 進行攔截。