大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 Shiro攔截器介紹

Shiro攔截器介紹

更新時間:2022-02-08 11:10:45 來源:動力節(jié)點 瀏覽1637次

攔截器介紹

Shiro 使用了與 Servlet 一樣的 Filter 接口進行擴展,首先下圖是 Shiro 攔截器的基礎類圖:

1.NameableFilter

NameableFilter 給 Filter 起個名字,如果沒有設置默認就是 FilterName;還記得之前的如 authc 嗎?當我們組裝攔截器鏈時會根據(jù)這個名字找到相應的攔截器實例;

2.OncePerRequestFilter

OncePerRequestFilter 用于防止多次執(zhí)行 Filter 的;也就是說一次請求只會走一次攔截器鏈;另外提供 enabled 屬性,表示是否開啟該攔截器實例,默認 enabled=true 表示開啟,如果不想讓某個攔截器工作,可以設置為 false 即可。

3.ShiroFilter

ShiroFilter 是整個 Shiro 的入口點,用于攔截需要安全控制的請求進行處理,這個之前已經(jīng)用過了。

4.AdviceFilter

AdviceFilter 提供了 AOP 風格的支持,類似于 SpringMVC 中的 Interceptor:

boolean preHandle(ServletRequest request, ServletResponse response) throws Exception
void postHandle(ServletRequest request, ServletResponse response) throws Exception
void afterCompletion(ServletRequest request, ServletResponse response, Exception exception) throws Exception;

preHandler:類似于 AOP 中的前置增強;在攔截器鏈執(zhí)行之前執(zhí)行;如果返回 true 則繼續(xù)攔截器鏈;否則中斷后續(xù)的攔截器鏈的執(zhí)行直接返回;進行預處理(如基于表單的身份驗證、授權)

postHandle:類似于 AOP 中的后置返回增強;在攔截器鏈執(zhí)行完成后執(zhí)行;進行后處理(如記錄執(zhí)行時間之類的);

afterCompletion:類似于 AOP 中的后置最終增強;即不管有沒有異常都會執(zhí)行;可以進行清理資源(如解除 Subject 與線程的綁定之類的);

5.PathMatchingFilter

PathMatchingFilter 提供了基于 Ant 風格的請求路徑匹配功能及攔截器參數(shù)解析的功能,如“roles[admin,user]”自動根據(jù)“,”分割解析到一個路徑參數(shù)配置并綁定到相應的路徑:

boolean pathsMatch(String path, ServletRequest request)
boolean onPreHandle(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception

pathsMatch:該方法用于 path 與請求路徑進行匹配的方法;如果匹配返回 true;

onPreHandle:在 preHandle 中,當 pathsMatch 匹配一個路徑后,會調(diào)用 opPreHandler 方法并將路徑綁定參數(shù)配置傳給 mappedValue;然后可以在這個方法中進行一些驗證(如角色授權),如果驗證失敗可以返回 false 中斷流程;默認返回 true;也就是說子類可以只實現(xiàn) onPreHandle 即可,無須實現(xiàn) preHandle。如果沒有 path 與請求路徑匹配,默認是通過的(即 preHandle 返回 true)。

6.AccessControlFilter

AccessControlFilter 提供了訪問控制的基礎功能;比如是否允許訪問/當訪問拒絕時如何處理等:

abstract boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception;
boolean onAccessDenied(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception;
abstract boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception;

isAccessAllowed:表示是否允許訪問;mappedValue 就是[urls]配置中攔截器參數(shù)部分,如果允許訪問返回 true,否則 false;

onAccessDenied:表示當訪問拒絕時是否已經(jīng)處理了;如果返回 true 表示需要繼續(xù)處理;如果返回 false 表示該攔截器實例已經(jīng)處理了,將直接返回即可。

onPreHandle 會自動調(diào)用這兩個方法決定是否繼續(xù)處理:

isAccessAllowed:表示是否允許訪問;mappedValue 就是[urls]配置中攔截器參數(shù)部分,如果允許訪問返回 true,否則 false;
onAccessDenied:表示當訪問拒絕時是否已經(jīng)處理了;如果返回 true 表示需要繼續(xù)處理;如果返回 false 表示該攔截器實例已經(jīng)處理了,將直接返回即可。
onPreHandle 會自動調(diào)用這兩個方法決定是否繼續(xù)處理:

另外 AccessControlFilter 還提供了如下方法用于處理如登錄成功后/重定向到上一個請求:

void setLoginUrl(String loginUrl) //身份驗證時使用,默認/login.jsp
String getLoginUrl()
Subject getSubject(ServletRequest request, ServletResponse response) //獲取Subject 實例
boolean isLoginRequest(ServletRequest request, ServletResponse response)//當前請求是否是登錄請求
void saveRequestAndRedirectToLogin(ServletRequest request, ServletResponse response) throws IOException //將當前請求保存起來并重定向到登錄頁面
void saveRequest(ServletRequest request) //將請求保存起來,如登錄成功后再重定向回該請求
void redirectToLogin(ServletRequest request, ServletResponse response) //重定向到登錄頁面 

比如基于表單的身份驗證就需要使用這些功能。

到此基本的攔截器就完事了,如果我們想進行訪問訪問的控制就可以繼承 AccessControlFilter;如果我們要添加一些通用數(shù)據(jù)我們可以直接繼承 PathMatchingFilter。如果大家想了解更相關知識,不妨來關注一下動力節(jié)點的Shiro視頻教程,里面的課程細致全面,通俗易懂,很適合沒有基礎的小伙伴學習,希望對大家能夠有所幫助。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 成人高清视频在线观看大全 | 日本综合 | 久艹伊人 | 欧美jizzhd欧美巨大 | 91系列| 老司机深夜福利网站 | 国产成人亚洲综合无 | 色老头一区二区三区 | 久久精品国产国语对白 | 欧美午夜在线观看 | 欧美激情免费看 | www.欧美| 欧美成人午夜免费完成 | 日韩欧美亚洲综合久久影院d3 | 久久久久久噜噜噜久久久精品 | 天天视频黄 | 久草在线视频首页 | 成人久久18免费网站 | 91精品欧美成人 | 桃色网站入口 | 国产欧美一区二区久久 | 久久香蕉国产线看观看8青草 | 97视频网站| 看全色黄大色大片免费久久久 | 免费欧美一级片 | 深夜激情网站 | 国产伦精品一区二区免费 | 男女性高爱麻豆 | 国产 麻豆 欧美亚洲综合久久 | 日本性网址| 99久久精品无码一区二区毛片 | 亚洲精品爱爱久久 | 午夜在线社区视频 | 免费在线观看一级片 | 色婷婷久久综合中文久久一本 | 99爱免费| 久久中文字幕综合不卡一二区 | 欧美日韩免费大片 | 国产欧美精品一区二区三区-老狼 | 91色综合综合热五月激情 | 四虎在线最新地址公告 |