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

控制台没有输出

经验分享 程序员 微信小程序 职场和发展