前言
WebMvcConfigurer配置类其实是Spring内部的一种配置方式,采用JavaBean的形式来代替传统的xml配置文件形式进行针对框架个性化定制,可以自定义一些Handler,Interceptor,ViewResolver,MessageConverter。基于java-based方式的spring mvc配置,需要创建一个配置类并实现WebMvcConfigurer 接口。
继承WebMvcConfigurer类并实现api拦截
代码语言:javascript复制WebConfiguration 主要用于对除登录API以外的接口都进行拦截处理,拦截到的所以请求再经过TokenInterceptor进行验证token
@Configuration
public class WebConfiguration implements WebMvcConfigurer {
/**
* 配置拦截器、拦截路径
* 每次请求到拦截的路径,就会去执行拦截器中的方法
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
List<String> excludePath = new ArrayList<>();
//排除拦截,除了注册登录(此时还没token),其他都拦截
excludePath.add("/usercontroller/user"); //登录
registry.addInterceptor(tokenInterceptor)
.addPathPatterns("/**")
.excludePathPatterns(excludePath);
WebMvcConfigurer.super.addInterceptors(registry);
}
}
HandlerInterceptor接口的拦截器实例配置
代码语言:javascript复制TokenInterceptor 主要用于验证请求头信息中是否存在token并解密token查询数据库是否存在该用户
@Component
public class TokenInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//跨域请求会首先发一个option请求,直接返回正常状态并通过拦截器
if(request.getMethod().equals("OPTIONS")){
response.setStatus(HttpServletResponse.SC_OK);
return true;
}
response.setCharacterEncoding("utf-8");
String token = request.getHeader("token");
if (token!=null){
boolean result= TokenUtils.verify(token);
if (result){
return true;
}
}
response.setContentType("application/json; charset=utf-8");
try {
JSONObject json=new JSONObject();
json.put("msg","未获取到登录信息,请返回重新登录。");
json.put("code","401");
response.getWriter().append(json.toString());
} catch (Exception e) {
return false;
}
return false;
}
}