自定義攔截器實現簡單登入攔截的步驟
阿新 • • 發佈:2019-02-19
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 } }