使用Servlet Filter實現系統登入許可權校驗
Servlet Filter介紹
過濾器是一些web應用程式元件,可以繫結到一個web應用程式中。但是與其他web應用程式元件不同的是,過濾器是”鏈”在容器的處理過程中的。這就意味著它們會在servlet處理器之前訪問一個進入的請求,並且在外發響應資訊返回到客戶前訪問這些響應資訊。這種訪問使得過濾器可以檢查並修改請求和響應的內容。
Filter適用的場景:
- 為一個web應用程式的新功能建立模型(可被新增到web應用程式中或者從web應用程式中刪除而不需要重寫基層應用程式程式碼)
- 向過去的程式碼新增新功能
- 使用者授權的Filter: Filter 負責檢查使用者請求,根據請求過濾使用者非法請求
- 日誌Filter: 詳細記錄某些特殊的使用者請求
- 負責解碼的Filter: 包括對非標準編碼的請求解碼
Filter使用的位置:
過濾器放在web資源之前,可以在請求抵達它所應用的web資源(可以是一個Servlet、一個Jsp頁面,甚至是一個HTML頁面)之前截獲進入的請求,並且在它返回到客戶之前截獲輸出請求。Filter:用來攔截請求,處於客戶端與被請求資源之間,目的是重用程式碼。Filter鏈,在web.xml中哪個先配置,哪個就先呼叫。在filter中也可以配置一些初始化引數。
Filter的用途:
- 在HttpServletRequest 到達Servlet 之前,攔截客戶的HttpServletRequest
- 根據需要檢查HttpServletRequest ,也可以修改HttpServletRequest 頭和資料
- 在HttpServletResponse 到達客戶端之前,攔截HttpServletResponse
- 根據需要檢查HttpServletResponse ,可以修改HttpServletResponse 頭和資料
一個Filter 可負責攔截多個請求或響應:一個請求或響應也可被多個請求攔截。
使用Filter進行系統登入許可權校驗
這裡我們使用對session進行校驗的方式,當對某一模組進行請求時,先校驗當前使用者的請求是否有session存在,如果有,繼續訪問,如果沒有,即跳轉到登入頁。
第一步:
編寫自己的Filter攔截類,攔截類需要實現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() {
}
}
這裡使用了攔截器鏈,當我們配置了多個攔截器的時候,伺服器會按照web.xml中過濾器定義的先後循序組裝成一條鏈,然後一次執行其中的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的校驗。
相關文章
- Spring Security實現統一登入與許可權控制Spring
- SpringAop實現許可權校驗與日誌列印Spring
- 角色許可權(Role)和系統許可權(System)的幾個澄清實驗
- layui使用html+servlet+ajax實現登入驗證UIHTMLServlet
- Oracle 使用者、物件許可權、系統許可權Oracle物件
- Asp.net下使用HttpModule模擬Filter,實現許可權控制ASP.NETHTTPFilter
- Oracle的物件許可權、角色許可權、系統許可權Oracle物件
- 前端許可權控制系統的實現思路前端
- Android系統許可權和root許可權Android
- 服務閘道器 Zuul 與 Redis 結合實現 Token 許可權校驗ZuulRedis
- 使用者許可權系統管理
- 01【若依框架】 登入許可權框架
- 使用 Laravel5.7 許可權管理系統後臺及前後臺使用者登入Laravel
- 用mvp模式實現登入註冊的統一校驗MVP模式
- 設計實現業務系統中的使用者許可權管理
- springboot + shiro 實現登入認證和許可權控制Spring Boot
- MySQL許可權系統MySql
- Oracle系統許可權Oracle
- learun通用許可權系統框架功能實現設計框架
- 管理系統之許可權的設計和實現
- 基於Spring Security實現許可權管理系統Spring
- drf 許可權校驗設定與原始碼分析原始碼
- 客戶端使用sysdba許可權登入資料庫客戶端資料庫
- Linux 使用者ssh登入許可權檢查Linux
- 如何用 Vue 實現前端許可權控制(路由許可權 + 檢視許可權 + 請求許可權)Vue前端路由
- MySQL資料庫許可權體系入門(3)---管理使用者許可權MySql資料庫
- SpringSecurity許可權管理系統實戰—九、資料許可權的配置SpringGse
- 使用動態路由實現許可權管理路由
- mongodb 的許可權系統MongoDB
- 【JavaWeb】許可權管理系統JavaWeb
- 有贊許可權系統
- Android系統許可權Android
- 許可權系統設計
- 許可權系統跟進
- Servlet+Session+Cookie登入、校驗、退出的邏輯程式碼ServletSessionCookie
- Java安全之Filter許可權繞過JavaFilter
- jwt加meta元資訊實現登入後校驗JWT
- 前後端實現登入token攔截校驗後端