使用Servlet Filter實現(xiàn)系統(tǒng)登錄權(quán)限
Servlet Filter介紹
過濾器是一些web應(yīng)用程序組件,可以綁定到一個web應(yīng)用程序中。但是與其他web應(yīng)用程序組件不同的是,過濾器是”鏈”在容器的處理過程中的。這就意味著它們會在servlet處理器之前訪問一個進入的請求,并且在外發(fā)響應(yīng)信息返回到客戶前訪問這些響應(yīng)信息。這種訪問使得過濾器可以檢查并修改請求和響應(yīng)的內(nèi)容。
Filter適用的場景:
1.為一個web應(yīng)用程序的新功能建立模型(可被添加到web應(yīng)用程序中或者從web應(yīng)用程序中刪除而不需要重寫基層應(yīng)用程序代碼)
2.向過去的代碼添加新功能
3.用戶授權(quán)的Filter: Filter 負責(zé)檢查用戶請求,根據(jù)請求過濾用戶非法請求
4.日志Filter: 詳細記錄某些特殊的用戶請求
5.負責(zé)解碼的Filter: 包括對非標準編碼的請求解碼
Filter使用的位置:
過濾器放在web資源之前,可以在請求抵達它所應(yīng)用的web資源(可以是一個Servlet、一個Jsp頁面,甚至是一個HTML頁面)之前截獲進入的請求,并且在它返回到客戶之前截獲輸出請求。Filter:用來攔截請求,處于客戶端與被請求資源之間,目的是重用代碼。Filter鏈,在web.xml中哪個先配置,哪個就先調(diào)用。在filter中也可以配置一些初始化參數(shù)。
Filter的用途:
1.在HttpServletRequest 到達Servlet 之前,攔截客戶的HttpServletRequest
2.根據(jù)需要檢查HttpServletRequest ,也可以修改HttpServletRequest 頭和數(shù)據(jù)
3.在HttpServletResponse 到達客戶端之前,攔截HttpServletResponse
4.根據(jù)需要檢查HttpServletResponse ,可以修改HttpServletResponse 頭和數(shù)據(jù)
一個Filter 可負責(zé)攔截多個請求或響應(yīng):一個請求或響應(yīng)也可被多個請求攔截。
使用Filter進行系統(tǒng)登錄權(quán)限校驗
這里我們使用對session進行校驗的方式,當對某一模塊進行請求時,先校驗當前用戶的請求是否有session存在,如果有,繼續(xù)訪問,如果沒有,即跳轉(zhuǎn)到登錄頁。
第一步:
編寫自己的Filter攔截類,攔截類需要實現(xiàn)servlet的filter接口
public class WebFilter implements Filter{
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpSession session = request.getSession();
String currPath = request.getRequestURI(); //當前請求的URL
if (session.getAttribute("logined") != null) {
filterChain.doFilter(servletRequest, servletResponse);
} else {
response.sendRedirect("/login.jsp");
}
}
@Override
public void destroy() {
}
}
這里使用了攔截器鏈,當我們配置了多個攔截器的時候,服務(wù)器會按照web.xml中過濾器定義的先后循序組裝成一條鏈,然后一次執(zhí)行其中的doFilter()方法。
第二步:
在web.xml中配置自定義的攔截器
web.xml:
<filter>
<filter-name>webFilter</filter-name>
<filter-class>com.test.interceptor.WebFilter</filter-class>
<init-param>
<param-name>skipPath</param-name>
<param-value>ok.jsp</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>webFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
這樣,就配置好了我們自定義的攔截器,如果有多個攔截器的話,請注意攔截器配置的順序,攔截會按照從上至下的順序進行攔截,一般來說處理編碼的攔截器配置在最上面。
通過上述步驟的操作,此時就可以通過URI進行訪問。此時如果能夠取得Session中的logined值時,會直接進入下一步處理,否則直接進入登錄頁面。從而就完成了session的校驗。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java實現(xiàn)學(xué)生管理系統(tǒng)詳解
這篇文章主要為大家詳細介紹了Java實現(xiàn)學(xué)生管理系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2021-10-10
SpringBoot+EasyPoi實現(xiàn)excel導(dǎo)出功能
最新小編遇到這樣一個需求,根據(jù)檢索條件查詢列表并將結(jié)果導(dǎo)出到excel,實現(xiàn)過程也非常簡單,感興趣的朋友跟隨小編一起看看吧2021-09-09
Spring Boot Hello World的實現(xiàn)代碼
這篇文章主要介紹了Spring Boot Hello World的實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
SpringBoot實現(xiàn)事件監(jiān)聽(異步執(zhí)行)的示例代碼
事件監(jiān)聽是一種機制,可以定義和觸發(fā)自定義的事件,以及在應(yīng)用程序中注冊監(jiān)聽器來響應(yīng)這些事件,本文主要介紹了SpringBoot實現(xiàn)事件監(jiān)聽(異步執(zhí)行)的示例代碼,感興趣的可以了解一下2024-08-08
Java中策略設(shè)計模式的實現(xiàn)及應(yīng)用場景
策略設(shè)計模式是Java中一種常用的設(shè)計模式,它通過定義一系列算法并將其封裝成獨立的策略類,從而使得算法可以在不影響客戶端的情況下隨時切換。策略設(shè)計模式主要應(yīng)用于系統(tǒng)中存在多種相似的算法、需要靈活調(diào)整算法邏輯或者需要擴展新的算法等場景2023-04-04
SpringBoot任務(wù)之定時任務(wù)相關(guān)知識總結(jié)
今天給大家整理的文章是SpringBoot定時任務(wù)的相關(guān)知識點,文中有非常詳細的介紹及代碼示例,對正在學(xué)習(xí)SpringBoot任務(wù)的小伙伴們很有幫助,需要的朋友可以參考下2021-06-06

