詳解JavaWeb過濾器 Filter問題解決
基本概念
1、 Filter 過濾器它是 JavaWeb 的三大組件之一。 三大組件分別是: Servlet 程序、 Listener 監(jiān)聽器、 Filter 過濾器
2、 Filter 過濾器它是 JavaEE 的規(guī)范。 也就是接口
3、 Filter 過濾器它的作用是: 攔截請求, 過濾響應
過濾器的三要素:
①攔截
過濾器之所以能夠?qū)φ埱筮M行預處理,關鍵是對請求進行攔截,把請求攔截下來才能夠做后續(xù)的操作。而且對于一個具體的過濾器,它必須明確它要攔截的請求,而不是所有請求都攔截。
②過濾
根據(jù)業(yè)務功能實際的需求,看看在把請求攔截到之后,需要做什么檢查或什么操作,寫對應的代碼即可。
③放行
過濾器完成自己的任務或者是檢測到當前請求符合過濾規(guī)則,那么可以將請求放行。所謂放行,就是讓請求繼續(xù)去訪問它原本要訪問的資源。
1.過濾器概述
過濾器,顧名思義就是對事物進行過濾的,在Web中的過濾器,當然就是對請求進行過濾,我們使用過濾器,就可以對請求進行攔截,然后做相應的處理,實現(xiàn)許多特殊功能。如登錄控制,權限管理,過濾敏感詞匯等
要在Javaweb項目中使用過濾器,實現(xiàn)Java - Servlet - Filter接口即可:
以下是一個模板,需要實現(xiàn)三個方法:
import javax.servlet.*; import java.io.IOException; public class CharacterEncodingFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { Filter.super.init(filterConfig); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { } @Override public void destroy() { Filter.super.destroy(); } }
2.使用過濾器解決中文編碼異常問題
Javaweb默認網(wǎng)頁內(nèi)輸出中文會發(fā)生亂碼,我們可以通過如下兩行來設置請求和響應編碼,以解決這個問題:
servletResponse.setContentType("text/html;charset=utf-8");
但是當存在多個Servlet時勢必會發(fā)生不便(產(chǎn)生大量冗余代碼),此時可以通過過濾器解決:
重寫doFilter方法:
@Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { servletResponse.setContentType("text/html;charset=utf-8"); // 必須要讓過濾器繼續(xù)通行 filterChain.doFilter(servletRequest, servletResponse); }
同時,在web.xml文件中也要進行配置:
<filter> <filter-name>EncodingFilter</filter-name> <filter-class>CharacterEncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>EncodingFilter</filter-name> <!-- 過濾整個網(wǎng)站的請求 --> <url-pattern>/*</url-pattern> </filter-mapping>
如上即可解決亂碼問題??
3.使用過濾器實現(xiàn)用戶登錄權限攔截
如下的doFilter過濾判斷,如果用戶的登錄SESSION為null,則跳轉(zhuǎn)登錄頁面:
@Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { // 強轉(zhuǎn)為HttpServletRequest格式 HttpServletRequest request = (HttpServletRequest) servletRequest; HttpServletResponse response = (HttpServletResponse) servletResponse; if (request.getSession().getAttribute("USER_LOGIN_SESSION") == null) { response.sendRedirect("/login.jsp"); } filterChain.doFilter(request, response); }
到此這篇關于詳解JavaWeb過濾器 Filter問題解決的文章就介紹到這了,更多相關javaweb filter過濾器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java源碼解析阻塞隊列ArrayBlockingQueue介紹
今天小編就為大家分享一篇關于Java源碼解析阻塞隊列ArrayBlockingQueue介紹,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-01-01idea中springboot整合mybatis找不到mapper接口的原因分析
這篇文章主要介紹了idea中springboot整合mybatis找不到mapper接口的原因分析及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01WIN7系統(tǒng)JavaEE(tomcat7 Eclipse)環(huán)境配置教程(二)
這篇文章主要介紹了WIN7系統(tǒng)JavaEE(java+tomcat7+Eclipse)環(huán)境配置教程,本文重點在于tomcat配置、Eclipse配置,感興趣的小伙伴們可以參考一下2016-06-06Springboot集成Mybatis-plus、ClickHouse實現(xiàn)增加數(shù)據(jù)、查詢數(shù)據(jù)功能
本文給大家講解Springboot + mybatis-plus 集成ClickHouse,實現(xiàn)增加數(shù)據(jù)、查詢數(shù)據(jù)功能,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧2024-08-08Idea中如何查看SpringSecurity各Filter信息
這篇文章主要介紹了Idea中如何查看SpringSecurity各Filter信息,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-01-01