http://pengenjing.iteye.com/blog/1607248
這里寫的過濾器用的是適配器模式,思路為:
先寫一個類實現Filter,然后在讓你寫的過濾器來繼承自這個類;
步驟:1.建一個AbstractFilter實現Filter;2.建一個類來繼承AbstractFilter,還要在web.xml中配置;
web.xml中的配置:
- <filter>
- <filter-name>validateFilter</filter-name>
- <filter-class>com.peng.ValidateFilter(這里寫的是類的完全限定名)</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>validateFilter</filter-name>
- <url-pattern>/*(這里是讓所有的通過)</url-pattern>
- </filter-mapping>
Abstractr.java
- public abstract class AbstractFilter implements Filter{
- public void destroy() {}
- public abstract void doFilter(ServletRequest request, ServletResponse response,
- FilterChain chain) throws IOException, ServletException ;
- public void init(FilterConfig filterConfig) throws ServletException {}
- }
下面是我自己寫的過濾器:我給他取名為 ValidateFilter;
ValidateFilter.java
- package com.kaishengit.web.filter;
- import java.io.IOException;
- import javax.servlet.FilterChain;
- import javax.servlet.ServletException;
- import javax.servlet.ServletRequest;
- import javax.servlet.ServletResponse;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import javax.servlet.http.HttpSession;
- import com.kaishengit.entity.User;
- import com.kaishengit.util.Const;
- public class ValidateFilter extends AbstractFilter{
- @Override
- public void doFilter(ServletRequest req, ServletResponse resp,
- FilterChain chain) throws IOException, ServletException {
- HttpServletRequest request = (HttpServletRequest) req;
- HttpServletResponse response = (HttpServletResponse) resp;
- //判斷如果是index.jspx 放行
- String uri = request.getRequestURI();
- uri = uri.substring(uri.lastIndexOf("/")+1);
- //System.out.println("當前請求的路徑: " + uri);
- if("".equals(uri) || "index.jsp".equals(uri) || "index.jspx".equals(uri) || "login.jspx".equals(uri) || uri.endsWith("png") || uri.endsWith("jpg")) {
- //所有人都能請求到的URI,放行
- chain.doFilter(request, response);
- } else { //下面是判斷是否有session,也就是用戶是否已登錄狀態;
- HttpSession session = request.getSession();
- User user = (User) session.getAttribute(Const.USER_IN_SESSION);
- if(user == null) {
- System.out.println("URI:" + uri + ">>>>訪問被拒絕!");
- response.sendRedirect("index.jspx?code=10002");
- } else {
- chain.doFilter(request, response);
- }
- }
- }
- }