在开发的过程中,为了实现登录权限验证,我们往往需要添加一个拦截器在用户的的请求到达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/*"); }
}