本人小白,在学习spring boot的时候遇到一个问题,自己在写拦截器的时候遇到的。
WebMvcConfigurerAdapter 这个已经被废弃,所以用 WebMvcConfigurationSupport。
配置拦截路径时,如果设置了
server.servlet.context-path = /api
在重写 addInterceptors 的时候拦截路径上不能有 /api
例如:
@Override
protected void addInterceptors(final InterceptorRegistry registry)
{
// 注册自定义拦截器,添加拦截路径和排除拦截路径
registry.addInterceptor(new LoginInterceptor())
.addPathPatterns("/api/**")
.excludePathPatterns(
"/error",
"/api/index",
"/api/loginIn"
);
super.addInterceptors(registry);
}
这样会导致拦截器不生效。
一开始我没有意识到是 server.servlet.context-path 的问题。后来经过无数次尝试。终于发现是 server.servlet.context-path 影响了。
所以正确的写法是忽略 /api ,直接写 controller 映射的地址。
@Override
protected void addInterceptors(final InterceptorRegistry registry)
{
// 注册自定义拦截器,添加拦截路径和排除拦截路径
registry.addInterceptor(new LoginInterceptor())
.addPathPatterns("/**")
.excludePathPatterns(
"/error",
"/index",
"/loginIn",
"/login",
"/logout",
"/register"
);
super.addInterceptors(registry);
}
本人从零学的spring boot,不懂server.servlet.context-path 的原理。大神们轻喷。
记录下,希望能帮到同样遇到类似问题的新手们。
网友评论