一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Spring MVC过滤器-登录过滤的实现代码

时间:2017-01-07 编辑:简简单单 来源:一聚教程网

一个非常简单的登录权限拦截器,具体代码如下:

以下代码是继承OncePerRequestFilter实现登录过滤的代码:

 
 代码如下 复制代码
/**
 *
 * @author geloin
 * @date 2012-4-10 下午2:37:38
 */
packagecom.test.spring.filter;
  
importjava.io.IOException;
importjava.io.PrintWriter;
  
importjavax.servlet.FilterChain;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
  
importorg.springframework.web.filter.OncePerRequestFilter;
  
/**
 * 登录过滤
 *
 * @author geloin
 * @date 2012-4-10 下午2:37:38
 */
publicclassSessionFilterextendsOncePerRequestFilter {
  
  /*
   * (non-Javadoc)
   *
   * @see
   * org.springframework.web.filter.OncePerRequestFilter#doFilterInternal(
   * javax.servlet.http.HttpServletRequest,
   * javax.servlet.http.HttpServletResponse, javax.servlet.FilterChain)
   */
  @Override
  protectedvoiddoFilterInternal(HttpServletRequest request,
      HttpServletResponse response, FilterChain filterChain)
      throwsServletException, IOException {
  
    // 不过滤的uri
    String[] notFilter =newString[] {"login.html","index.html"};
  
    // 请求的uri
    String uri = request.getRequestURI();
  
    // uri中包含background时才进行过滤
    if(uri.indexOf("background") != -1) {
      // 是否过滤
      booleandoFilter =true;
      for(String s : notFilter) {
        if(uri.indexOf(s) != -1) {
          // 如果uri中包含不过滤的uri,则不进行过滤
          doFilter =false;
          break;
        }
      }
      if(doFilter) {
        // 执行过滤
        // 从session中获取登录者实体
        Object obj = request.getSession().getAttribute("loginedUser");
        if(null== obj) {
          // 如果session中不存在登录者实体,则弹出框提示重新登录
          // 设置request和response的字符集,防止乱码
          request.setCharacterEncoding("UTF-8");
          response.setCharacterEncoding("UTF-8");
          PrintWriter out = response.getWriter();
          String loginPage ="....";
          StringBuilder builder =newStringBuilder();
          builder.append("");
          out.print(builder.toString());
        }else{
          // 如果session中存在登录者实体,则继续
          filterChain.doFilter(request, response);
        }
      }else{
        // 如果不执行过滤,则继续
        filterChain.doFilter(request, response);
      }
    }else{
      // 如果uri中不包含background,则继续
      filterChain.doFilter(request, response);
    }
  }
  
}
 

写完过滤器后,需要在web.xml中进行配置:

 
 代码如下 复制代码
  sessionFilter
  com.test.spring.filter.SessionFilter
  sessionFilter
  /*
 

热门栏目