spring MVC使用Interceptor做用戶登錄判斷


在任何一個項目中,我們必須要用到的就是用戶登錄,那么就少不了用戶是否登錄的判斷,如果我們每一個請求都要去做一次判斷,那么就會變得很麻煩,但我們復制粘貼的時候我們就要考慮我們的代碼寫的是不是有問題,是不是可以重構一下,這里借鑒一下項目中的這種模式:

package interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import logical.login.LoginUser;

import org.apache.log4j.Logger;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

public class SessionCheckInterceptor extends HandlerInterceptorAdapter {
    private static Logger log = Logger.getLogger(SessionCheckInterceptor.class.toString());
    
    public void afterCompletion(HttpServletRequest request,
            HttpServletResponse response,
            Object handler,
            Exception ex) throws Exception {  
    }  
      
    @Override  
    public void postHandle(HttpServletRequest request,  
            HttpServletResponse response,
            Object handler,
            ModelAndView modelAndView) throws Exception {

    }  
      
    @Override  
    public boolean preHandle(HttpServletRequest request,  
            HttpServletResponse response, Object handler) throws Exception {
        //判斷此使用者是否可進此連結
        request.setCharacterEncoding("UTF-8");
        String url = request.getServletPath();    
        log.info("post URL:"+url);
        
        /*{        
            List<HttpSession> sessionList = HttpSessionListenerTest.getAllSession();
            log.info("\n\n\n\n Session資料開始============================");
            for( int i=0; i < sessionList.size(); i++){
                Object ob = sessionList.get(i).getAttribute("loginUser");
                if( ob == null ){
                    continue;
                }
                LoginUser result = (LoginUser)ob;
                System.out.println( result.getAccountName());
            }
            log.info("Session資料結束============================");
        }
        */
        /*String headername = "";
        for(Enumeration e = request.getHeaderNames(); e.hasMoreElements();){
            headername = (String)e.nextElement();
            String value = request.getHeader(headername);
            log.info(headername+":"+value);
        }*/
        if(this.isPassUrl(url)){
            //判斷是否已登錄
            LoginUser loginUser = CssUtil.getLoginUser(request);
            if(loginUser == null){
                //無session則是未登錄狀態
                log.info(">>>未登錄,請重新登錄<<<");
                response.sendRedirect("../login.jsp");
                return false;
            }
        }
        return true;
    }
    private boolean isPassUrl(String url){
        if(!url.endsWith("/login/login") 
                && !url.endsWith("/login/chnagePassEntry")
                && !url.endsWith("/login/change_Login")
                && !url.endsWith("/API/Service")
                && !url.endsWith("/API/Service2")
                && !url.endsWith("/province.txt")
                && !url.endsWith("/city.txt")
                && !url.endsWith("/area.txt")
                && !url.endsWith(".xml") 
                && !url.endsWith(".js") 
                && !url.endsWith(".css") && !url.endsWith(".png")
                && !url.endsWith(".CSS") && !url.endsWith(".CSS") 
                && !url.endsWith(".jpg") && !url.endsWith(".gif")
                && !url.endsWith(".JPG") && !url.endsWith(".GIF")){
            return true;
        }

        return false;
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM