使用場(chǎng)景:通常我們需要對(duì)每一個(gè)請(qǐng)求進(jìn)行過濾,比如權(quán)限或者是登錄狀態(tài)(token),此時(shí)我們不必再每個(gè)請(qǐng)求中傳遞token和username這兩個(gè)參數(shù),可以將其放在HttpServletRequest對(duì)象愕撰,然后從中獲取览露,再使用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è)返回失敗信息的請(qǐng)求路徑:
/**
* 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)證失敗,請(qǐng)重新登陸");
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>