添加Spring MVC攔截器

使用場景:通常我們需要對每一個(gè)請求進(jìn)行過濾,比如權(quán)限或者是登錄狀態(tài)(token),此時(shí)我們不必再每個(gè)請求中傳遞token和username這兩個(gè)參數(shù),可以將其放在HttpServletRequest對象,然后從中獲取,再使用spring mvc的攔截器進(jìn)行驗(yàn)證,成功則返回true。

1.下面我們以token攔截器為例:創(chuàng)建攔截器TokenInterceptor.java

package com.a.b.common.web.interceptor;

import com.a.b.common.util.AccessRestProxy;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

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

/**
 * token登錄攔截器
 * <p>
 * <code>HandlerInterceptorAdapter</code>
 * </p>
 *
 * @author Mcchu
 * @version 1.0 @date 2017-07-27
 * @since 1.0
 */
public class TokenInterceptor extends HandlerInterceptorAdapter {

    private static final Log log = LogFactory.getLog(TokenInterceptor.class);

    private static final String NO_AUTHORITY_ACTION = "/tokenInvalid";

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception{
        String userAccount=request.getParameter("userAccount");
        String token=request.getParameter("token");
        Boolean hasToken = AccessRestProxy.hasToken(userAccount,token);
        if (hasToken){
            log.info("token驗(yàn)證通過");
            return true;
        }else {
            response.sendRedirect(request.getContextPath() + NO_AUTHORITY_ACTION);
            log.info("token驗(yàn)證失敗,沒有權(quán)限");
            return false;
        }
    }

}

2.token驗(yàn)證失敗重定向到一個(gè)返回失敗信息的請求路徑:

    /**
     * Token驗(yàn)證失敗返回信息
     * @return
     */
    @GetMapping("/tokenInvalid")
    @ResponseBody
    public ResponseEntity<ResponseVo<String>> noTokenAuthority(){
        ResponseVo<String> responseVo = new ResponseVo<>("false", GpsMsgKey.getTipMsg("no_authority"), "Token驗(yàn)證失敗,請重新登陸");
        ResponseEntity<ResponseVo<String>> responseEntity = new ResponseEntity<ResponseVo<String>>(responseVo, HttpStatus.OK);
        return responseEntity;
    }

3.mvc攔截器設(shè)置,spring mvc配置文件里:

    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/gps/setting/getGPSSetting"/>
            <mvc:mapping path="/gpsDateCtl/uploadGPS/"/>
            <mvc:mapping path="/gps/law/getLaw"/>
            <mvc:mapping path="/gps/user/setting/isValidGPS"/>
            <mvc:exclude-mapping path="/resources/**" />
            <bean class="com.a.b.common.web.interceptor.TokenInterceptor" />
        </mvc:interceptor>-->
    </mvc:interceptors>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,973評論 19 139
  • 1. 認(rèn)識(shí)攔截器 Spring MVC的攔截器(Interceptor)不是Filter,同樣可以實(shí)現(xiàn)請求的預(yù)處理...
    郭尋撫閱讀 19,780評論 1 16
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,970評論 6 342
  • application的配置屬性。 這些屬性是否生效取決于對應(yīng)的組件是否聲明為Spring應(yīng)用程序上下文里的Bea...
    新簽名閱讀 5,428評論 1 27
  • 曾經(jīng)認(rèn)為,肉體和精神是完全分開的,只需要將自己的精神、意志鍛煉得足夠強(qiáng)大,那么肉體是難以干擾自己行為的。并且很長的...
    鹿鹿小講堂閱讀 533評論 0 2