黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

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

Shiro攔截器介紹

更新時(shí)間:2022-02-08 11:10:45 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1638次

攔截器介紹

Shiro 使用了與 Servlet 一樣的 Filter 接口進(jìn)行擴(kuò)展,首先下圖是 Shiro 攔截器的基礎(chǔ)類圖:

1.NameableFilter

NameableFilter 給 Filter 起個(gè)名字,如果沒(méi)有設(shè)置默認(rèn)就是 FilterName;還記得之前的如 authc 嗎?當(dāng)我們組裝攔截器鏈時(shí)會(huì)根據(jù)這個(gè)名字找到相應(yīng)的攔截器實(shí)例;

2.OncePerRequestFilter

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

3.ShiroFilter

ShiroFilter 是整個(gè) Shiro 的入口點(diǎn),用于攔截需要安全控制的請(qǐng)求進(jìn)行處理,這個(gè)之前已經(jīng)用過(guò)了。

4.AdviceFilter

AdviceFilter 提供了 AOP 風(fēng)格的支持,類似于 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 中的前置增強(qiáng);在攔截器鏈執(zhí)行之前執(zhí)行;如果返回 true 則繼續(xù)攔截器鏈;否則中斷后續(xù)的攔截器鏈的執(zhí)行直接返回;進(jìn)行預(yù)處理(如基于表單的身份驗(yàn)證、授權(quán))

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

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

5.PathMatchingFilter

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

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

pathsMatch:該方法用于 path 與請(qǐng)求路徑進(jìn)行匹配的方法;如果匹配返回 true;

onPreHandle:在 preHandle 中,當(dāng) pathsMatch 匹配一個(gè)路徑后,會(huì)調(diào)用 opPreHandler 方法并將路徑綁定參數(shù)配置傳給 mappedValue;然后可以在這個(gè)方法中進(jìn)行一些驗(yàn)證(如角色授權(quán)),如果驗(yàn)證失敗可以返回 false 中斷流程;默認(rèn)返回 true;也就是說(shuō)子類可以只實(shí)現(xiàn) onPreHandle 即可,無(wú)須實(shí)現(xiàn) preHandle。如果沒(méi)有 path 與請(qǐng)求路徑匹配,默認(rèn)是通過(guò)的(即 preHandle 返回 true)。

6.AccessControlFilter

AccessControlFilter 提供了訪問(wèn)控制的基礎(chǔ)功能;比如是否允許訪問(wèn)/當(dāng)訪問(wèn)拒絕時(shí)如何處理等:

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:表示是否允許訪問(wèn);mappedValue 就是[urls]配置中攔截器參數(shù)部分,如果允許訪問(wèn)返回 true,否則 false;

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

onPreHandle 會(huì)自動(dòng)調(diào)用這兩個(gè)方法決定是否繼續(xù)處理:

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

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

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

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

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

提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 欧美日韩视频一区二区 | 日韩高清在线播放 | 国产日韩欧美一区二区三区视频 | 草草免费观看视频在线 | 日韩一区二区三区视频 | 国产成人精品免费视频大全麻豆 | 日韩精品亚洲专区在线观看 | 亚洲妇人成熟性成熟网站 | 偷偷操不一样的久久 | yy6080理aa级伦大片一级 | 又黄又爽的美女免费视频 | 波多野结衣与老人公gvg在线 | 亚洲精品影视 | 欧美一区二区在线视频 | 一区二区视频在线观看免费的 | 亚洲欧美日韩综合久久久久 | 国产va精品网站精品网站精品 | 伊人久久大杳蕉综合大象 | 又黄又爽又色的视频在线看 | 成人综合在线观看 | 国内自拍欧美 | 午夜伦理在线观看 | 老司机午夜精品视频在线观看免费 | 人人干视频在线观看 | 999精品视频这里只有精品 | 综合网激情五月 | 亚洲一区免费观看 | 天天摸天天做天天爽 | 毛片手机在线看 | 一级黄色大片视频 | 波多野结衣178部中文字幕 | 性欧美free| 特黄视频| 成年网站免费观看 | 一区免费在线观看 | 亚洲国产精品毛片∧v卡在线 | 一级做a免费观看大全 | 99亚洲 | 国产极品在线观看视频 | 亚洲免费在线看 | 亚洲 日本 欧美 日韩精品 |