几个月前自己搭的框架,今天整理项目的时候由于删除了一些代码,添加了一些代码,导致静态资源有的请求可以,有的请求直接到了首页,
又看了shiroConfig,看了也配置了
for (Object obj:inter){
if(obj != null){
// 配置不会被拦截的链接 顺序判断
filterChainDefinitionMap.put(String.valueOf(obj), "anon");
logMap.put("obj"+i,obj);
}
i++;
}
filterChainDefinitionMap.put("/logout", "logout");
filterChainDefinitionMap.put("/**", "authc,kickout");
后来打了断点一步一步跟,结果也都是可以的,
后来就想着一个一个把拦截器注调,就找到了那里的问题了
问题在于:
@Configuration
public class MvcConfig implements WebMvcConfigurer {
@Value("#{'${inter}'.split(',')}")
private String[] inter;
@Bean
public VersionInterceptor versionInterceptor(){
return new VersionInterceptor();
}
@Bean
public WebMvcConfigurer webMvcConfigurer(){
WebMvcConfigurer webMvcConfigurer = new WebMvcConfigurer() {
// 重点在这
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/*").setViewName("login");
registry.addViewController("/index.html").setViewName("login");
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new IllegalCharacterInterceptor()).addPathPatterns("/**");
registry.addInterceptor(versionInterceptor()).addPathPatterns("/**")
.excludePathPatterns("/login")
.excludePathPatterns("/logout")
.excludePathPatterns(inter);
}
};
return webMvcConfigurer;
}
}
导致的,如果把拦截器交给了shiro去过滤,上面红色的都不用写了,直接干掉
第二个问题:
拦截器中的@Autowired注入失败,为空
@Autowired
private UserService userService;
解决方法:添加红色部分即可
@Configuration
public class MvcConfig implements WebMvcConfigurer {
@Value("#{'${inter}'.split(',')}")
private String[] inter;
// 添加这部分即可
@Bean
public VersionInterceptor versionInterceptor(){
return new VersionInterceptor();
}
@Bean
public WebMvcConfigurer webMvcConfigurer(){
WebMvcConfigurer webMvcConfigurer = new WebMvcConfigurer() {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new IllegalCharacterInterceptor()).addPathPatterns("/**");
registry.addInterceptor(versionInterceptor()).addPathPatterns("/**")
.excludePathPatterns("/login")
.excludePathPatterns("/logout")
.excludePathPatterns(inter);
}
};
return webMvcConfigurer;
}
}