先不管爲啥技術棧混亂,遇到問題了描述一下,Shiro
解決方案
添加路徑處理器,當一個 swagger-ui.html 請求過來,既要經過權限認證,是不是模板引擎的模板,是不是靜態資源的重重處理,服務器也不知道它要要幹啥了。
最開始我在網上搜索的文章,幾乎都是說,通過
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}
這樣一個配置,並且 shiro 放行了 swagger-ui.html,但是我發現配置後還是打不開,但起碼它不會再被指定到 static 路徑了,後來發現,其實是 shiro 沒有放行 swagger 所需的資源,僅放行 swagger-ui.html 是不夠的,於是:
@Bean
public ShiroFilterFactoryBean shiroFilterFactoryBean(DefaultWebSecurityManager securityManager) {
ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();
//---------省略------
// filterChainDefinitions攔截器map必須用:LinkedHashMap,因爲它必須保證有序
Map<String, String> filterMap = new LinkedHashMap<>();
// 配置不會被攔截的鏈接
filterMap.put("/swagger-ui.html", "anon");
filterMap.put("/swagger-ui.html/**", "anon");
filterMap.put("/swagger-resources/**", "anon");
filterMap.put("/webjars/**", "anon");
filterMap.put("/v2/**", "anon");
// 添加 shiro 過濾器
bean.setFilterChainDefinitionMap(filterMap);
logger.info("Shiro攔截器工廠類注入成功");
return bean;
}
就可以了