一、拦截器实现:
1.实现 HandlerInterceptor 接口,重写 preHandle() 方法即可,代码如下:
@Component
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class ThirdInterceptor implements HandlerInterceptor {
private final JwtOperator jwtOperator;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 业务代码……
// 放行
return HandlerInterceptor.super.preHandle(request, response, handler);
// 拦截
// return false;
// 或抛异常
// throw new Exception("异常信息");
}
}
2.拦截器配置类,代码如下:
@Configuration
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class InterceptorConfig implements WebMvcConfigurer {
private final ThirdInterceptor thirdInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
// excludePathPatterns() 方法设置过滤路径,addPathPatterns() 方法设置拦截路径
registry.addInterceptor(thirdInterceptor).excludePathPatterns("/doc.html", "/user/**",
"/swagger-resources", "/swagger-resources/configuration/ui")
.addPathPatterns("/**");
WebMvcConfigurer.super.addInterceptors(registry);
}
}
注意,过滤路径可能会有不生效问题,大概率是写错了路径。路径写的是接口里的路径,如果项目中配置了统一的访问前缀,不能写进去!例如下方yml配置:
server:
port: 8080
#设置统一访问前缀
servlet:
context-path: /api/v1
若有该统一前缀配置,前端要访问后端的/doc.html 接口的访问路径则是:/api/v1/doc.html,如果配置过滤路径写成如下图,则会导致过滤配置失效,配置错误代码如下图:
配置类正常配置完毕后拦截器则生效。
二、读取资源文件:
如图,若要读取下图的 third-pass-url.yml 文件(resource文件夹下)
代码如下:
// 指定文件
ClassPathResource classPathResource = new ClassPathResource("third-pass-url.yml");
// 创建输入流
InputStream in = classPathResource.getInputStream();
// 读取内容
StringBuilder sb = new StringBuilder();
byte[] buffer = new byte[1024];
while (in.read(buffer, 0, 1024) != -1) {
sb.append(new String(buffer));
}
System.out.println("文件内容:" + sb.toString());
// 关闭流
in.close();