1.簡介
- 過濾器能夠在Servlet、JSP或HTML等web組件被調用之前檢查ServletRequest對象,修改請求頭和請求正文的內容或者對請求進行預處理操作
- 能夠在Servlet、JSP或HTML等web組件被調用之後檢查ServletReponse對象,修改響應頭和響應正文。
- 利用包裝類ServletRequestWrapper和ServletResponseWrapper來修改ServletRequest對象和ServletResponse對象。
2.如何創建過濾器?
必須實現javax.servlet.Filter接口。
- init(FilterConfig config):過濾器初始化方法。Web應用啓動時,Servlet容器首先創建FilterConfig對象(包含過濾器配置信息),然後創建Filter對象,接着調用Filter對象的init(FilterConfig config)方法,讀取web.xml中的配置參數。
-
web.xml中添加過濾器配置public class LoginFilter implements Filter{ private FilterConfig config; private String username; @Override public void destroy() { this.config = null; } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { //HttpServletRequest httpRequest = (HttpServletRequest)request; HttpServletResponse httpResponse = (HttpServletResponse)response; System.out.println("登錄過濾器驗證"); if(StringUtils.equalsIgnoreCase(username, "flyer")){ System.out.println("驗證通過"); chain.doFilter(request, response); }else { System.out.println("驗證被攔截"); httpResponse.sendRedirect("login.jsp"); } } @Override public void init(FilterConfig config) throws ServletException { this.config = config; username = config.getInitParameter("username"); } }
- <filter>
- <filter-name>loginFilter</filter-name>
- <filter-class>com.flyer.filter.LoginFilter</filter-class>
- <init-param>
- <param-name>username</param-name>
- <param-value>flyer</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>loginFilter</filter-name>
- <url-pattern>
- /*
- </url-pattern>
- </filter-mapping>
- <filter>
- <filter-name>encodingFilter</filter-name>
- <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
- <init-param>
- <param-name>encoding</param-name>
- <param-value>
- UTF-8
- </param-value>
- </init-param>
- </filter>
- <!-- 過濾器能爲所有的url過濾 -->
- <filter-mapping>
- <filter-name>encodingFilter</filter-name>
- <url-pattern>
- /*
- </url-pattern>
- </filter-mapping>