后端开发经常会遇到特殊url的逻辑处理,比如登录接口不需要验证用户登录状态,但是获取用户信息接口则需要验证用户登录状态,这时就需要用到拦截器,下面介绍一下拦截器的用法:
1、添加拦截器
添加类并继承HandlerInterceptor,如下:
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class AuthInterceptor implements HandlerInterceptor {
// 逻辑处理之前
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 特殊的条件
if (condition) {
response.getWriter().write("直接拦截返回数据!");
return false;
}
return true;
}
}
AuthInterceptor是自定义类名,这里只实现了preHandle,另外还有postHandle和afterCompletion
2、注册拦截器
添加类并继承WebMvcConfigurer,如下:
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
@EnableWebMvc
public class AuthWebMvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new AuthInterceptor())
.addPathPatterns("/band/**")
.excludePathPatterns("/band/list");
}
}
AuthWebMvcConfig是自定义类名,通过实现addInterceptors来注册拦截器,对于所有除“/band/list”之外的请求“/band/**”,均需要由AuthInterceptor处理
参考文章:
官方文档:https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-config-interceptors



