1.介绍
SpringBoot拦截器,它主要用于拦截用户的请求并做相应的处理,通常应用在权限验证、记录请求信息的日志、判断用户是否登录等功能上。
2.
示例场景:在SpringBoot中自定义一个拦截器,判断用户的请求中是否携带了token,要是用户请求携带了token则让用户执行Controller方法,否则直接在拦截器拒绝用户请求。
3.代码示例
自定义拦截器HandlerInterceptor 接口是必须实现的,它里面提供了三个方法:
preHandle:进入Controller之前对请求进行前置处理。方法返回为true,会被spring向后传递给其他拦截器或者被后续Controller处理,返回为false,则请求到当前拦截器就终止了,不会向后进行传递
postHandle:请求被处理以后要做什么事情,Controller中抛出异常就不会执行
afterCompletion:数据被渲染以后执行,在前后端分离架构中一般不用
public class TokenInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 强制要求用户请求头中有一个token的字符串 String token = request.getHeader("token"); if(token != null){ // token存在处理逻辑 System.out.println("发现Token:" + token + ",准备用户身份校验"); System.out.println("用户身份校验通过"); return true; }else{ // token不存在处理逻辑 ObjectMapper objectMapper = new ObjectMapper(); Map result = new LinkedHashMap(); result.put("code", "500"); result.put("message", "请求未包含Token,用户校验失败"); String json = objectMapper.writeValueAsString(result); response.setContentType("application/json;charset=utf-8"); response.getWriter().println(json); return false; } } }
第二步:创建应用程序配置类,实现WebMvcConfigurer对拦截器进行定义
WebMvcConfigurer配置类其实是Spring内部的一种配置方式,采用JavaBean的形式来代替传统的xml配置文件形式进行针对框架个性化定制,可以自定义一些Handler, Interceptor,ViewResolver,MessageConverter。基于java-based方式的spring mvc 配置,需要创建一个配置类并实现WebMvcConfigurer 接口;
// @Configuration 注解,通过java类的形式,替换原有的xml配置文件 @Configuration public class SpringWebConfiguration implements WebMvcConfigurer { // addInterceptors方法对系统中的拦截器进行配置的 @Override public void addInterceptors(InterceptorRegistry registry) { // registry 表示添加全新的拦截器,这里将刚才判断token的拦截器加入 InterceptorRegistration registration = registry.addInterceptor(new TokenInterceptor()); // 拦截器拦截的请求URL地址 registration.addPathPatterns("/na/**"); // 不进行拦截的URL地址,排除多个地址,可以通过String 数组的形式传入 registration.excludePathPatterns(new String[]{"/img/**", "/static/**"}); } }
4.测试验证
没添加token访问,用户请求失败
转载请注明:西门飞冰的博客 » SpringBoot定义拦截器