SpringBoot2实现拦截器并读取yml配置的访问路径
①新建application.yml文件,添加如下代码
path: include: - /admin/** exclude: - /user/**
②新建配置类存储yml文件中的配置,可自行设置前缀名,与配置文件中前缀名一致即可
@Data @Component @ConfigurationProperties(prefix = "path") public class PathConfig { private List<String> include = new ArrayList<>(); private List<String> exclude = new ArrayList<>(); }
此步骤完成了,当项目启动时,配置文件中的路径就会注入到PathConfig的属性中
注意事项:
1、属性名需要和配置文件中的一致
2、"-"后需要跟一个空格,否则会导致读取的路径名带"-"
③新建主配置类实现WebMvcConfigurer
在Spring Boot 1.5版本都是靠重写WebMvcConfigurerAdapter的方法来添加自定义拦截器,消息转换器等。SpringBoot 2.0 后,该类被标记为@Deprecated。因此我们只能靠实现WebMvcConfigurer接口来实现,类名可自定义
@Configuration public class LoginAdapter implements WebMvcConfigurer { @Autowired private PathConfig pathConfig; @Override public void addInterceptors(InterceptorRegistry registry) { InterceptorRegistration ir = registry.addInterceptor(new LoginInterceptor()); ir.addPathPatterns(pathConfig.getInclude()); // 拦截 ir.excludePathPatterns(pathConfig.getExclude());// 配置不拦截 } }
④新建拦截器类实现HandlerInterceptor
public class LoginInterceptor implements HandlerInterceptor { /** * 进入Controller之前 */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("preHandle里面....."); System.err.println("-------"+request.getRequestURI()); return true; }
⑤浏览器输入访问地址
接口自行创建
5.1 浏览器输入,可自行调整端口号,我这里设置端口为8090
控制台输出
preHandle里面..... -------/admin/hello
5.2 浏览器输入,可自行调整端口号,我这里设置端口为8090
控制台没有输出