首先了解一下拦截器的应用场景:
- 权限检查:检查是否有访问某接口的权限;
- 日志记录:记录请求信息的日志,便于进行信息监控与统计;
- …
那如何在自己的项目中加入自定义拦截器呢?废话少说,开盘:
1.自定义一个拦截器
该类为自定义的拦截器类,实现HandlerInterceptor类
public class AuthInterceptor implements HandlerInterceptor {
/**
* 请求处理之前调用
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
String skey = request.getParameter("skey");
String skey2 = "123";//skey2类似token,与request中的比对。
if(skey.equals(skey2))
return true;
else{
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json; charset=utf-8");
PrintWriter out = null;
JSONObject res = new JSONObject();
res.put("success", false);
res.put("message", "请携带skey");
out = response.getWriter();
out.append(res.toString());
return false;
}
}
/**
* 请求处理之后调用
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// TODO Auto-generated method stub
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
}
/**
* 响应后调用
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// TODO Auto-generated method stub
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}
}
2.创建拦截器配置类,载入自定义拦截器
@Configuration
public class SpringMVCConfig extends WebMvcConfigurationSupport {
@Bean
public AuthInterceptor getAuthInterceptor() {
return new AuthInterceptor();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry
.addInterceptor(getAuthInterceptor())//注册自定义拦截器,addPathPatterns("/xxx")添加拦截的路径,在excludePathPatterns("/xxx")添加不拦截的路径
// .addPathPatterns("/**")
.addPathPatterns("/user/**")
.excludePathPatterns("/user/getUsers")
.excludePathPatterns("/user/wx/login")
.excludePathPatterns("/swagger-resources/**", "/webjars/**", "/v2/**", "/swagger-ui.html/**");
super.addInterceptors(registry);
}
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
super.addResourceHandlers(registry);
}
}
OK!