练习
1.定义拦截器
实现Interceptor接口
//交给spring管理,同时要能扫描到
@Configuration
@Slf4j
public class TokenInterceptor implements HandlerInterceptor {
//请求之前执行
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
log.info("开始获取token");
String token = "";
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie:cookies){
if(cookie.getName().equals("token")){
token = cookie.getValue();
}
}
}
if(StringUtils.isBlank(token)){
response.setStatus(401);
return false;
}
//最后一定要返回 true,否则就不能执行业务逻辑
return true;
}
//请求之后执行
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle ... ");
}
//完成之后执行
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterCompletion ...");
}
}
2.定义配置类
定义一个类继承 WebMvcConfigurationSupport 实现里面的 addInterceptors()的方法
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
//将刚才定义的拦截器注入
@Resource
private TokenInterceptor tokenInterceptor;
@Override
protected void addInterceptors(InterceptorRegistry registry) {
//添加拦截器
registry.addInterceptor(tokenInterceptor)
//拦截所有的请求
.addPathPatterns("/**")
//排除的请求
.excludePathPatterns("/login");
}
//添加放行的资源
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("").addResourceLocations("");
}
}