过滤器

要想实现此功能,分以下两步:

1.配置web.xml:

Xml代码   收藏代码
  1. <filter>  
  2.         <filter-name>LoginFilter</filter-name>  
  3.         <filter-class>com.yusj.core.filter.LoginFilter</filter-class>  
  4.     </filter>  
  5.     <filter-mapping>  
  6.         <filter-name>LoginFilter</filter-name>  
  7.         <url-pattern>/*</url-pattern>  
  8.     </filter-mapping>  

 

2.创建过滤器实现类,实现Filter接口:

Java代码   收藏代码
  1. package com.yusj.core.filter;  
  2.   
  3. import java.io.IOException;  
  4.   
  5. import javax.servlet.Filter;  
  6. import javax.servlet.FilterChain;  
  7. import javax.servlet.FilterConfig;  
  8. import javax.servlet.ServletException;  
  9. import javax.servlet.ServletRequest;  
  10. import javax.servlet.ServletResponse;  
  11. import javax.servlet.http.HttpServletRequest;  
  12. import javax.servlet.http.HttpServletResponse;  
  13. import javax.servlet.http.HttpSession;  
  14.   
  15. /** 
  16.  *  
  17. * @ClassName: LoginFilter  
  18. * @Description: 登录过滤器  
  19. * @author shaojian.yu 
  20. * @date 2014年11月3日 下午1:19:28  
  21. * 
  22.  */  
  23. public class LoginFilter implements Filter {  
  24.   
  25.     /** 
  26.      *  
  27.       * Title:doFilter 
  28.       * Description: 所有请求都走此过滤器来判断用户是否登录 
  29.       * user: shaojian.yu 
  30.       * date:  2014 2014年11月3日 
  31.       * @param servletRequest 
  32.       * @param servletResponse 
  33.       * @param filterChain 
  34.       * @throws IOException 
  35.       * @throws ServletException 
  36.       * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain) 
  37.      */  
  38.     @Override  
  39.     public void doFilter(ServletRequest servletRequest,  
  40.             ServletResponse servletResponse, FilterChain filterChain)  
  41.             throws IOException, ServletException {  
  42.         // 判断是否是http请求  
  43.         if (!(servletRequest instanceof HttpServletRequest)  
  44.                 || !(servletResponse instanceof HttpServletResponse)) {  
  45.             throw new ServletException(  
  46.                     "OncePerRequestFilter just supports HTTP requests");  
  47.         }  
  48.         // 获得在下面代码中要用的request,response,session对象  
  49.         HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;  
  50.         HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;  
  51.         HttpSession session = httpRequest.getSession(true);  
  52.   
  53.         String[] strs = { "loginpage""login""logout""static" }; // 路径中包含这些字符串的,可以不用登录直接访问  
  54.         StringBuffer url = httpRequest.getRequestURL();  
  55.           
  56.         /** 
  57.          * 过滤掉根目录 
  58.          */  
  59.         String path = httpRequest.getContextPath();  
  60.         String protAndPath = httpRequest.getServerPort() == 80 ? "" : ":"  
  61.                 + httpRequest.getServerPort();  
  62.         String basePath = httpRequest.getScheme() + "://"  
  63.                 + httpRequest.getServerName() + protAndPath + path + "/";  
  64.         if (basePath.equalsIgnoreCase(url.toString())) {  
  65.             filterChain.doFilter(servletRequest, servletResponse);  
  66.             return;  
  67.         }  
  68.         // 特殊用途的路径可以直接访问  
  69.         if (strs != null && strs.length > 0) {  
  70.             for (String str : strs) {  
  71.                 if (url.indexOf(str) >= 0) {  
  72.                     filterChain.doFilter(servletRequest, servletResponse);  
  73.                     return;  
  74.                 }  
  75.             }  
  76.         }  
  77.         // 从session中获取用户信息  
  78.         String loginInfo = (String) session.getAttribute("username");  
  79.         if (null != loginInfo && !"".equals(loginInfo)) {  
  80.             // 用户存在,可以访问此地址  
  81.             filterChain.doFilter(servletRequest, servletResponse);  
  82.         } else {  
  83.             // 用户不存在,踢回登录页面  
  84.             String returnUrl = httpRequest.getContextPath() + "/loginpage";  
  85.             httpRequest.setCharacterEncoding("UTF-8");  
  86.             httpResponse.setContentType("text/html; charset=UTF-8"); // 转码  
  87.             httpResponse  
  88.                     .getWriter()  
  89.                     .println(  
  90.                             "<script language=\"javascript\">alert(\"您还没有登录,请先登录!\");if(window.opener==null){window.top.location.href=\""  
  91.                                     + returnUrl  
  92.                                     + "\";}else{window.opener.top.location.href=\""  
  93.                                     + returnUrl  
  94.                                     + "\";window.close();}</script>");  
  95.             return;  
  96.         }  
  97.   
  98.     }  
  99.   
  100.     @Override  
  101.     public void init(FilterConfig arg0) throws ServletException {  
  102.   
  103.     }  
  104.   
  105.     @Override  
  106.     public void destroy() {  
  107.   
  108.     }  
  109.   
  110. }  

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值