我們有時候做的網站需要身份驗證,需要登錄以后才能訪問網站內部資源;但是地址欄里會顯示你訪問網站的地址,如果沒有登錄就直接輸入該網址也會直接進入到該網頁;這個時候我們還是需要做一個過濾器,當外部訪問網站內部資源時,先要經過這個這個過濾器,過濾器判斷你的session里面是否存在你這個用戶,如果有就跳轉成功,如果沒有就跳轉回登陸頁面。

    以下是代碼和配置過程:
    過濾器代碼:
public class IsLoginFilter implements Filter{
    
    
public void destroy() {
        
    }

    
    
public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain filterChain) 
throws IOException, ServletException {
        System.out.println(
"every request pass here");
        HttpServletRequest hrequest 
= (HttpServletRequest)request;
        HttpSession session 
= hrequest.getSession();
        User user 
= (User)session.getAttribute(Global.USER);
        
if(user==null){
            
//跳轉到登陸頁面
            hrequest.getRequestDispatcher("/index.jsp").forward(request, response);
        }

        filterChain.doFilter(request, response);
    }

    
    
public void init(FilterConfig config) throws ServletException {
        
    }

}


    登錄以后的處理:
public class LoginServlet extends HttpServlet{
    
    
public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
        String userName 
= request.getParameter("username");
        String passWord 
= request.getParameter("password");
        
        System.out.println(
"userName | " + userName);
        System.out.println(
"passWord | " + passWord);
        User user 
= new User();
        user.setUserName(userName);
        user.setPassWord(passWord);
        HttpSession session 
= request.getSession();
        
//登錄成功,把User放到session,然后在攔截器中判斷
        session.setAttribute(Global.USER, user);
        request.getRequestDispatcher(
"/admin/main.jsp").forward(request, response);
    }

    
    
public void doGet(HttpServletRequest request,HttpServletResponse response)
    
throws ServletException,IOException{
        
    }

}

    兩個類的配置過程:
<filter>
   <filter-name>isLogin</filter-name>
   <filter-class>com.bx.course.IsLoginFilter</filter-class>
 </filter>
 <filter-mapping>
   <filter-name>isLogin</filter-name>
   <url-pattern>/admin/*</url-pattern>
 </filter-mapping>
 
 <servlet>
     <servlet-name>login</servlet-name>
     <servlet-class>com.bx.course.LoginServlet</servlet-class>
  </servlet>
 <servlet-mapping>
     <servlet-name>login</servlet-name>
     <url-pattern>/login</url-pattern>
 </servlet-mapping>

    下面試一下登錄和未登錄兩種情況下的處理結果:
    未登錄情況:



    已登錄情況:




    這個過濾器就能把未登錄而想進入admin目錄里面的main.jsp的用戶給阻止了。