在開發的過程中,爲了實現登錄權限驗證,我們往往需要添加一個攔截器在用戶的的請求到達controller層的時候實現登錄驗證,實現原理:
1.創建TokenInterceptor類,實現HandlerInterceptor接口,重寫接口中的三個方法:
package com.myapp.core.config;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @author :zzb
* @createDate :2019/6/28 16:41
* @desc :攔截器
*/
public class TokenInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
System.out.println("--------攔截器執行前置方法 --------preHandle---------------");
return true;
}
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
System.out.println("--------攔截器執行後置方法 --------postHandle---------------");
}
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
System.out.println("--------攔截器執行最終方法 --------afterCompletion---------------");
}
}
2.創建WebAppConfigurer類繼承WebMvcConfigureAdapter類,註冊自定義的攔截器TokenInterceptor,覆蓋其addInterceptors接口:
package com.myapp.core.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
/**
* @author :zzb
* @createDate :2019/6/28 17:02
* @desc :
*/
@Configuration
public class WebAppConfigurer extends WebMvcConfigurerAdapter {
@Value("${interceptor.configs}")
private String configs;
@Bean
public HandlerInterceptor getTokenInterceptor(){
return new TokenInterceptor();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 多個攔截器組成一個攔截器鏈
// addPathPatterns 用於添加攔截規則
// excludePathPatterns 用於排除攔截路徑
registry.addInterceptor(getTokenInterceptor()).addPathPatterns(configs).excludePathPatterns("/test/*"); }
}