Springboot 使用 Shiro 模板引擎時使用 swagger-ui 時的問題

先不管爲啥技術棧混亂,遇到問題了描述一下,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;
    }

就可以了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章