使用Filter验证用户是否登陆,完整示例

  1. /*  
  2. 使用Filter进行用户信息验证等操作是个不错的选择。  
  3. 这是OnlineFilter.java  
  4. 初学者注意,这里用到的是javax.servlet.*,不包含在j2sdk里,需要从j2ee sdk中,或者$tomcat_home/lib/ 或者$resin_home/lib/下找到那个jar包。  
  5. */  
  6. package cn.techtiger.struts;   
  7.   
  8. import java.io.IOException;   
  9.   
  10. import javax.servlet.FilterChain;   
  11. import javax.servlet.FilterConfig;   
  12. import javax.servlet.ServletContext;   
  13. import javax.servlet.ServletException;   
  14. import javax.servlet.ServletRequest;   
  15. import javax.servlet.ServletResponse;   
  16. import javax.servlet.http.HttpServlet;   
  17. import javax.servlet.http.HttpServletRequest;   
  18. import javax.servlet.http.HttpServletResponse;   
  19. import javax.servlet.http.HttpSession;   
  20.   
  21. public class OnlineFilter extends HttpServlet implements javax.servlet.Filter {   
  22.   
  23.   private static final long serialVersionUID = 1L;   
  24.   
  25.   public void doFilter(ServletRequest request, ServletResponse response,   
  26.       FilterChain chain) throws ServletException, IOException {   
  27.     HttpServletRequest req = (HttpServletRequest) request;   
  28.     HttpServletResponse res = (HttpServletResponse) response;   
  29.     HttpSession session = req.getSession();   
  30.   
  31.     if (session.getAttribute("user") == null) {   
  32.       System.out.println("user has logged in.");   
  33.       res.sendRedirect("error.jsp");   
  34.       return;   
  35.     } else {   
  36.       chain.doFilter(request, response);   
  37.     }   
  38.   
  39.   }   
  40.   
  41.   public void init(FilterConfig filterConfig) {   
  42.     System.out.println("OnlineFilter initialized.");   
  43.   }   
  44.   
  45.   public void destroy() {   
  46.     System.out.println("OnlineFilter destroied");   
  47.   }   
  48.   
  49. }   
  50.   
  51. <hr/>   
  52. 这是web.xml的配置   
  53.   
  54. <filter>   
  55.       <filter-name>onlineFilter</filter-name>   
  56.       <filter-class>cn.techtiger.struts.OnlineFilter</filter-class>   
  57.    </filter>   
  58.   
  59.   <filter-mapping>   
  60.         <filter-name>onlineFilter</filter-name>   
  61.       <url-pattern>u_*.jsp</url-pattern>   
  62.   </filter-mapping>   
  63.   
  64. 注意:url-pattern是匹配哪些url要通过这个filter过滤,目前配置就是验证以u_开头的.jsp文件。   
  65.   
  66. <hr/>   
  67. 这是几个测试的jsp文件   
  68.   
  69. testFilter.jsp   
  70.   
  71. <%@ page pageEncoding="UTF-8" %>   
  72. <html>   
  73.   <body>   
  74.     <%   
  75.     session.setAttribute("user","techtiger");   
  76.   %>   
  77.   <form action="u_login.jsp" method="post" >   
  78.     <input type=submit value="测试用户登录">   
  79.   </form>   
  80.   </body>   
  81. </html>   
  82.   
  83. u_login.jsp   
  84.   
  85. <%@ page pageEncoding="UTF-8" %>   
  86. <html>   
  87.   <body>   
  88.     用户已经登录,所以可以看到此页面 <br>   
  89.     用户退出后,再访问此页面就访问不到了,而是直接转向了error.jsp 在OnlineFilter.java中指定的。   
  90.   <form action="exit.jsp" method="post" >   
  91.     <input type=submit value="用户退出">   
  92.   </form>   
  93.   </body>   
  94. </html>   
  95.   
  96. exit.jsp   
  97.   
  98. <%   
  99.    session.removeAttribute("user");   
  100.    response.sendRedirect("u_login.jsp");   
  101. %>   
  102.   
  103. error.jsp   
  104.   
  105. <%@ page pageEncoding="UTF-8" %>   
  106. <%    
  107.   out.println("错误");   
  108. %>   
  109. <hr/>   
  110. 测试的jsp文件,起始业testFilter.jsp,此页已经创建了session,所以当访问u_login.jsp时,通过了filter的过滤,点击退出,exit.jsp 删除掉了session attribute “user”(注意:exit.jsp不经过filter过滤),然后返回u_login.jsp,此时已经没有session attribute “user",所以filter把它跳转至error.jsp    

你可能感兴趣的:(html,jsp,session,测试,filter,user)