天天看點

java spring登入驗證_springMVC 使用者登入權限驗證實作過程解析

通過上網搜資料顯示,使用filter和interceptor都可以實作。不過推薦使用interceptor.

下面就使用Interceptor實作使用者登入權限驗證功能。

攔截器需要實作Inceptor攔截器接口的三個方法。

1.preHandle方法

顧名思義,該方法将在請求處理之前進行調用。SpringMVC 中的Interceptor 是鍊式的調用的,在一個應用中或者說是在一個請求中可以同時存在多個Interceptor 。每個Interceptor 的調用會依據它的聲明順序依次執行,而且最先執行的都是Interceptor 中的preHandle 方法,是以可以在這個方法中進行一些前置初始化操作或者是對目前請求的一個預處理,也可以在這個方法中進行一些判斷來決定請求是否要繼續進行下去。該方法的傳回值是布爾值Boolean類型的,當它傳回為false 時,表示請求結束,後續的Interceptor 和Controller 都不會再執行;當傳回值為true 時就會繼續調用下一個Interceptor 的preHandle 方法,如果已經是最後一個Interceptor 的時候就會是調用目前請求的Controller 方法。

2.postHandle風法

由preHandle 方法的解釋我們知道這個方法包括後面要說到的afterCompletion 方法都隻能是在目前所屬的Interceptor 的preHandle 方法的傳回值為true 時才能被調用。postHandle 方法,顧名思義就是在目前請求進行處理之後,也就是Controller 方法調用之後執行,但是它會在DispatcherServlet 進行視圖傳回渲染之前被調用,是以我們可以在這個方法中對Controller 處理之後的ModelAndView 對象進行操作。postHandle 方法被調用的方向跟preHandle 是相反的,也就是說先聲明的Interceptor 的postHandle 方法反而會後執行。

3.afterCompletion方法

該方法也是需要目前對應的Interceptor 的preHandle 方法的傳回值為true 時才會執行。顧名思義,該方法将在整個請求結束之後,也就是在DispatcherServlet 渲染了對應的視圖之後執行。這個方法的主要作用是用于進行資源清理工作的。

下面實作自己的攔截器

package com.huitong.util;

import org.springframework.web.servlet.HandlerInterceptor;

import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

public class StudentAuth implements HandlerInterceptor {

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

HttpSession session = request.getSession();

Object stu = session.getAttribute("student");

if( stu == null ){

response.sendRedirect("/webapp1/index.jsp");

return false;

}

return true;

}

public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

}

public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

}

}

最後需要在spring-mvc.xml配置檔案中進行攔截器配置,下面是配置片段

最後可以測試使用了

以上就是本文的全部内容,希望對大家的學習有所幫助,也希望大家多多支援腳本之家。