欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

springMVC 用戶登錄權(quán)限驗(yàn)證實(shí)現(xiàn)過程解析

 更新時(shí)間:2019年11月08日 09:59:24   作者:crazyCodeLove  
這篇文章主要介紹了springMVC 用戶登錄權(quán)限驗(yàn)證實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

通過上網(wǎng)搜資料顯示,使用filter和interceptor都可以實(shí)現(xiàn)。不過推薦使用interceptor.

下面就使用Interceptor實(shí)現(xiàn)用戶登錄權(quán)限驗(yàn)證功能。

攔截器需要實(shí)現(xiàn)Inceptor攔截器接口的三個(gè)方法。

1.preHandle方法

顧名思義,該方法將在請(qǐng)求處理之前進(jìn)行調(diào)用。SpringMVC 中的Interceptor 是鏈?zhǔn)降恼{(diào)用的,在一個(gè)應(yīng)用中或者說是在一個(gè)請(qǐng)求中可以同時(shí)存在多個(gè)Interceptor 。每個(gè)Interceptor 的調(diào)用會(huì)依據(jù)它的聲明順序依次執(zhí)行,而且最先執(zhí)行的都是Interceptor 中的preHandle 方法,所以可以在這個(gè)方法中進(jìn)行一些前置初始化操作或者是對(duì)當(dāng)前請(qǐng)求的一個(gè)預(yù)處理,也可以在這個(gè)方法中進(jìn)行一些判斷來決定請(qǐng)求是否要繼續(xù)進(jìn)行下去。該方法的返回值是布爾值Boolean類型的,當(dāng)它返回為false 時(shí),表示請(qǐng)求結(jié)束,后續(xù)的Interceptor 和Controller 都不會(huì)再執(zhí)行;當(dāng)返回值為true 時(shí)就會(huì)繼續(xù)調(diào)用下一個(gè)Interceptor 的preHandle 方法,如果已經(jīng)是最后一個(gè)Interceptor 的時(shí)候就會(huì)是調(diào)用當(dāng)前請(qǐng)求的Controller 方法。

2.postHandle風(fēng)法

由preHandle 方法的解釋我們知道這個(gè)方法包括后面要說到的afterCompletion 方法都只能是在當(dāng)前所屬的Interceptor 的preHandle 方法的返回值為true 時(shí)才能被調(diào)用。postHandle 方法,顧名思義就是在當(dāng)前請(qǐng)求進(jìn)行處理之后,也就是Controller 方法調(diào)用之后執(zhí)行,但是它會(huì)在DispatcherServlet 進(jìn)行視圖返回渲染之前被調(diào)用,所以我們可以在這個(gè)方法中對(duì)Controller 處理之后的ModelAndView 對(duì)象進(jìn)行操作。postHandle 方法被調(diào)用的方向跟preHandle 是相反的,也就是說先聲明的Interceptor 的postHandle 方法反而會(huì)后執(zhí)行。

3.afterCompletion方法

該方法也是需要當(dāng)前對(duì)應(yīng)的Interceptor 的preHandle 方法的返回值為true 時(shí)才會(huì)執(zhí)行。顧名思義,該方法將在整個(gè)請(qǐng)求結(jié)束之后,也就是在DispatcherServlet 渲染了對(duì)應(yīng)的視圖之后執(zhí)行。這個(gè)方法的主要作用是用于進(jìn)行資源清理工作的。

下面實(shí)現(xiàn)自己的攔截器

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配置文件中進(jìn)行攔截器配置,下面是配置片段

<mvc:interceptors>
    <mvc:interceptor>
      <!-- 先匹配所有路徑,然后排除不需要檢查的路徑 -->
      <mvc:mapping path="/**"/>

      <!-- 與登錄相關(guān)的請(qǐng)求 -->
      <mvc:exclude-mapping path="/*.jsp"/>
      <mvc:exclude-mapping path="/student/login.action"/>
      <mvc:exclude-mapping path="/student/register.action"/>

      <!-- 以下是靜態(tài)資源 -->
      <mvc:exclude-mapping path="/images/**" />
      <mvc:exclude-mapping path="/css/**" />
      <mvc:exclude-mapping path="/font/**" />
      <mvc:exclude-mapping path="/js/**" />
      <mvc:exclude-mapping path="/datepicker/**" />

      <!-- 用戶是否已經(jīng)登錄的檢查bean -->
      <bean class="com.huitong.util.StudentAuth"/>
        
    </mvc:interceptor>
  </mvc:interceptors>

最后可以測(cè)試使用了

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論