Filter有要實(shí)現(xiàn)的三方法:
void init(FilterConfig config) throws ServletException
void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
void destroy()
第一個(gè)方法,F(xiàn)ilter被加載時(shí),首先執(zhí)行這個(gè)方法,常用來(lái)做些初始化的動(dòng)作。
第二個(gè)方法,F(xiàn)ilter處理過(guò)程的方法,最后一個(gè)參數(shù)chain,則是把request,response傳給下一個(gè)Filter的FilterChain 對(duì)象,F(xiàn)ilterChain是用doFilter()方法來(lái)調(diào)用下一個(gè)Filter,或者當(dāng)沒(méi)有Filter可調(diào)用時(shí),則調(diào)用原始的Servlet等網(wǎng)頁(yè)部分。

其次需要在Web.xml中設(shè)定Filter類和對(duì)應(yīng)的網(wǎng)頁(yè)類別。

下面是一個(gè)用Filter來(lái)對(duì)請(qǐng)求做統(tǒng)一的認(rèn)證處理(參《jsp2.0技術(shù)手冊(cè)》)

public class SessionCheckerFilter implements Filter{
    
private final Log logger = LogFactory.getLog(getClass());
    
private ServletContext context;
    
private String targetURI;
    
private String loginChecker;

    
/* (non-Javadoc)
     * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
     
*/

    
public void init(FilterConfig config) throws ServletException {
       context 
= config.getServletContext();
       targetURI 
= config.getInitParameter("TargetURI");
       loginChecker 
= config.getInitParameter("loginChecker");
    }


    
/* (non-Javadoc)
     * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
     
*/

    
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        
// TODO Auto-generated method stub
        LoginUserPool loginUserPool = LoginUserPool.getInstance();
        HttpServletRequest httpRequest 
= (HttpServletRequest) request;
        HttpServletResponse httpResponse 
= (HttpServletResponse) response;
        HttpSession session 
= httpRequest.getSession(false);
        
if(session != null){
            String passed 
= (String) session.getAttribute("passed");

                
if(passed.equals("true")){
                    chain.doFilter(httpRequest,httpResponse);
                    
return;
                }
else if(passed.equals("passing")){
                    
if(new String(httpRequest.getRequestURI()).equals(httpRequest.getContextPath()+"/"+loginChecker)){
                        chain.doFilter(httpRequest,httpResponse);
                        
return;
                    }

                }

            session.removeAttribute(
"passed");
        }

        StringBuffer requestURL 
= httpRequest.getRequestURL();
        String query 
= httpRequest.getQueryString();
        
if(query != null){
            requestURL.append(query);
        }

        httpRequest.setAttribute(
"originalURI",new String(requestURL));
        httpRequest.getRequestDispatcher(targetURI).forward(httpRequest,httpResponse);
    }


    
/* (non-Javadoc)
     * @see javax.servlet.Filter#destroy()
     
*/

    
public void destroy() {
        
// TODO Auto-generated method stub
        
    }


public class LoginChecker extends HttpServlet{
    
private final Log logger = LogFactory.getLog(getClass());
    
protected void doPost(
            HttpServletRequest httpRequest,
            HttpServletResponse httpResponse) 
throws IOException, ServletException {
            logger.info(
"Servlet:用戶登陸合法性判斷");
            String userId 
= httpRequest.getParameter("userId");
            String password 
= httpRequest.getParameter("password");
            String targetURI 
= httpRequest.getParameter("originalURI");
            
if ((!userId.equals("admin")) || (!password.equals("1234"))) {
                
throw new ServletException("粄靡ア毖");
            }

            
            HttpSession session 
= httpRequest.getSession();
            session.setAttribute(
"passed""true");
            httpResponse.sendRedirect(targetURI);
        }


 }


<%@ page contentType="text/html;charset=Big5" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<html>
<head>
  
<title>CH11 - Login.jsp</title>
</head>
<body>

<h2></h2>
<h2>用戶名admin,密碼1234</h2>

<c:set var="passed" value="passing" scope="session" />
<form method="post" action="/JSPBook/LoginChecker">
  
<table>
    
<tr>
      
<th>用戶名</th>
      
<td><input type="text" name="userId"></td>
    
</tr>
    
<tr>
      
<th>密碼</th>
      
<td><input type="password" name="password"></td>
    
</tr>
    
<th><input type="hidden" name="originalURI" value="${requestScope.originalURI}"></th>
    
    
<tr>
      
<th><input name="submit" type="submit" value="確認(rèn)"></th>
    
</tr>
  
</table>
</form>

</body>
</html>

<filter>     
      
<filter-name>SessionChecker</filter-name>    
      
<filter-class>tw.com.javaworld.CH11.SessionChecker</filter-class>    
      
<init-param>
        
<param-name>targetURI</param-name>        
        
<param-value>/CH11/Login.jsp</param-value>    
      
</init-param>
    
</filter>
    
<filter-mapping>    
      
<filter-name>SessionChecker</filter-name>    
      
<url-pattern>/*</url-pattern>
    
</filter-mapping>
  
  
<servlet>
        
<servlet-name>LoginChecker</servlet-name>
        
<servlet-class>tw.com.javaworld.CH11.LoginChecker</servlet-class>
    
</servlet>    
    
<servlet-mapping>
        
<servlet-name>LoginChecker</servlet-name>
        
<url-pattern>/LoginChecker</url-pattern>
    
</servlet-mapping>



必須的話再做一些其它的過(guò)濾器,來(lái)判斷,用戶的合法性等等。