解决shiro整合swagger 拦截静态资源问题

公司接了一个新项目需要一份接口文档,所以集合了knife4j在项目中。添加项目依赖,因为公司的依赖管理是grable所以我添加的是glable格式的依赖如下:

 并且添加配置类

@Configuration
@EnableSwagger2
@EnableKnife4j
@ConfigurationProperties(prefix = "swagger")
public class SwaggerManualConfiguration {
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .useDefaultResponseMessages(false)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com"))
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("自己定义API文档")
                .description("自己定义")
                .termsOfServiceUrl("自己定义url")
                .version("1.0")
                .build();
    }
}

因为项目需要shiro做拦截所以如果只定义上面的话,shrio会将静态资源拦截在外面,所以要放开资源!

我们先 定义一个配置类去实现WebMvcConfigurer然后重写addResourceHandlers方法,WebMvcConfigurer是spring自身的一个拦截配置可以放开项目的静态资源

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
    registry.addResourceHandler("/favicon.ico").addResourceLocations("classpath:/META-INF/resources/");
    registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}

配置好了这些之后我们去shrio的配置类放开登录就可以访问knife4j文档啦!

defaultShiroFilterChainDefinition.addPathDefinition("/doc.html", "anon");
defaultShiroFilterChainDefinition.addPathDefinition("/webjars/**/**", "anon");
defaultShiroFilterChainDefinition.addPathDefinition("/swagger/**", "anon");
defaultShiroFilterChainDefinition.addPathDefinition( "/v2/**","anon");
defaultShiroFilterChainDefinition.addPathDefinition( "/static/**", "anon");
defaultShiroFilterChainDefinition.addPathDefinition("/swagger-resources/**", "anon");

然后重启项目访问自己的ip+端口+doc.html,下面是我的类似这种

 最后展现的效果!

 本人是一枚小萌新,如果有不对的地方希望各位大佬指正批评!

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Spring Boot中,可以通过整合Shiro来实现对请求的拦截和权限控制。如果不希望Shiro拦截某个请求,可以通过配置Shiro的过滤器链来实现。 首先,在Spring Boot的配置类中,需要注入一个FilterRegistrationBean对象来配置Shiro的过滤器链。然后,通过调用FilterRegistrationBean的addInitParameter方法,设置Shiro过滤器的init参数。 在设置Shiro过滤器的init参数时,可以通过使用Shiro内置的过滤器来达到不拦截某个请求的目的。其中,"anon"代表不需要认证即可访问,"authc"代表需要认证才能访问。 示例代码如下: @Configuration public class ShiroConfig { @Bean public FilterRegistrationBean<DelegatingFilterProxy> shiroFilterRegistration() { FilterRegistrationBean<DelegatingFilterProxy> registration = new FilterRegistrationBean<>(); registration.setFilter(new DelegatingFilterProxy("shiroFilter")); Map<String, String> initParameters = new LinkedHashMap<>(); // 不拦截某个请求 initParameters.put("anon", "/path/to/skip"); // 其他需要认证的请求 initParameters.put("authc", "/path/to/authenticate"); registration.setInitParameters(initParameters); registration.setOrder(1); registration.addUrlPatterns("/*"); return registration; } // 其他Shiro配置省略... } 在上述代码中,通过设置initParameters来指定需要不拦截的请求与需要认证的请求。其中,"/path/to/skip"代表不需要进行认证和授权的请求路径。 通过以上配置,可以实现Spring Boot与Shiro整合,并使得Shiro拦截某个特定的请求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值