Spring MVC過濾器-登錄過濾

yg3n 9年前發布 | 6K 次閱讀 Java

以下代碼是繼承OncePerRequestFilter實現登錄過濾的代碼:

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);
      

      } }

}</pre>

寫完過濾器后,需要在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>

 本文由用戶 yg3n 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!