Spring MVC过滤器-登录过滤

来源:互联网 发布:类似天下游的软件 编辑:程序博客网 时间:2024/06/05 14:42

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

    /**      *      * @author geloin      * @date 2012-4-10 下午2:37:38      */      package com.test.spring.filter;            import java.io.IOException;      import java.io.PrintWriter;            import javax.servlet.FilterChain;      import javax.servlet.ServletException;      import javax.servlet.http.HttpServletRequest;      import javax.servlet.http.HttpServletResponse;            import org.springframework.web.filter.OncePerRequestFilter;            /**      * 登录过滤      *       * @author geloin      * @date 2012-4-10 下午2:37:38      */      public class SessionFilter extends OncePerRequestFilter {                /*          * (non-Javadoc)          *           * @see          * org.springframework.web.filter.OncePerRequestFilter#doFilterInternal(          * javax.servlet.http.HttpServletRequest,          * javax.servlet.http.HttpServletResponse, javax.servlet.FilterChain)          */          @Override          protected void doFilterInternal(HttpServletRequest request,                  HttpServletResponse response, FilterChain filterChain)                  throws ServletException, IOException {                    // 不过滤的uri              String[] notFilter = new String[] { "login.html", "index.html" };                    // 请求的uri              String uri = request.getRequestURI();                    // uri中包含background时才进行过滤              if (uri.indexOf("background") != -1) {                  // 是否过滤                  boolean doFilter = 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 = new StringBuilder();                          builder.append("<script type=\"text/javascript\">");                          builder.append("alert('网页过期,请重新登录!');");                          builder.append("window.top.location.href='");                          builder.append(loginPage);                          builder.append("';");                          builder.append("</script>");                          out.print(builder.toString());                      } else {                          // 如果session中存在登录者实体,则继续                          filterChain.doFilter(request, response);                      }                  } else {                      // 如果不执行过滤,则继续                      filterChain.doFilter(request, response);                  }              } else {                  // 如果uri中不包含background,则继续                  filterChain.doFilter(request, response);              }          }            }  

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

    <filter>          <filter-name>sessionFilter</filter-name>          <filter-class>com.test.spring.filter.SessionFilter</filter-class>      </filter>      <filter-mapping>          <filter-name>sessionFilter</filter-name>          <url-pattern>/*</url-pattern>      </filter-mapping>  


0 1
原创粉丝点击