1. 程式人生 > >自定義攔截器實現簡單登入攔截的步驟

自定義攔截器實現簡單登入攔截的步驟

1. 首先建立一個類MyInterceptor 實現這個HandlerInterceptor介面:org.springframework.web.servlet.HandlerInterceptor
    重寫其三個方法prehandle在進入controller的方法執行之前     posthandle執行的方法執行完成之後   和aftercomplate方法最終向前臺頁面跳轉之前
    
2.然後根據request.getRequestURI()這個方法判斷請求的路徑是否是跟登入有關的路徑,如果是則放過,
    如果不是通過HttpSession session = request.getSession();獲得session,通過session獲得登入物件,看看是否有登入資訊
    如果有登入資訊,說明使用者登入過,直接放過請求就行了
    如果沒有登入資訊,直接跳轉到登入頁面讓使用者登入

3.寫完自己的攔截器之後再springmvc中配置自己的攔截器

    <mvc:interceptors>
        <mvc:interceptor>
            <!-- 攔截所有請求 -->
            <mvc:mapping path="/**"/>
            <bean name="my1" class="www.lj.com.interceptor.MyInterceptor"></bean>
        </mvc:interceptor>
    </mvc:interceptors>


4.同時需要注意的是前臺css和jquery的檔案也會攔截,所以還需要配置讓spring載入css和jquery的資源,儘量放在攔截器的配置上面
  

    <mvc:resources location="/static/" mapping="/static/**" />
    <mvc:resources location="/css/" mapping="/css/**"/>
    <mvc:resources location="/js/" mapping="/js/**"/>


5.執行測試。


public class MyInterceptor implements HandlerInterceptor{

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object obj) throws Exception {
		
		if(request.getRequestURI().endsWith("login")||request.getRequestURI().endsWith("register")){
			return true;
		}else{
			HttpSession session = request.getSession();
			User user = (User) session.getAttribute("user");
			if(user!=null){
				return true;
			}else{
				response.sendRedirect("/");
				return false;
			}
		}
	}

	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object obj, ModelAndView arg3)
			throws Exception {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object obj, Exception arg3)
			throws Exception {
		// TODO Auto-generated method stub
		
	}

}