springboot shiro 自定义配置swagger地址 配合权限

参考了三篇文章
SpringBoot2.0配置swagger2并统一加入认证参数Authorize
https://blog.csdn.net/weixin_30409927/article/details/99826685

SpringMVC + swagger修改swagger-ui.html的访问路径
https://blog.csdn.net/u014207158/article/details/89947199

springfox & swagger-ui 和 springmvc的整合(以及展示路径修改)
https://www.jianshu.com/p/ce7e247515f5?utm_source=oschina-app

思路:
因为在启动项目的时候SWAGGER打包的JAR会在RESOURCE里进行访问
所以先要从MVC配置入手,将访问的地址指向RESOURCE,参考MVC配置
然后将正常访问swagger地址http://localhost:8080/swagger-ui.html 和controller匹配返回相应数据就可以做成无法访问的效果
配合shiro的话就要需要用到权限才能访问到http://localhost:8080/api/swagger/swagger-ui.html,如果直接访问时不可能带token访问到的,所以必须要嵌套在前段网页中进行token访问才能正常打开SWAGGER网页

swagger依赖

		<dependency>
			<groupId>io.springfox</groupId>
			<artifactId>springfox-swagger2</artifactId>
			<version>2.8.0</version>
		</dependency>
		<dependency>
			<groupId>io.springfox</groupId>
			<artifactId>springfox-swagger-ui</artifactId>
			<version>2.8.0</version>
		</dependency>

SWAGGER配置

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2).
                useDefaultResponseMessages(false)
                .select()
                //此配置指定扫描哪个位置的CONTROLLER
                .apis(RequestHandlerSelectors.basePackage("com.andy.testdemo.controller"))
                .paths(PathSelectors.regex("^(?!auth).*$"))
                .build()
                .securitySchemes(securitySchemes())
                .securityContexts(securityContexts())
                ;
    }

    private List<ApiKey> securitySchemes() {

        return new ArrayList(
                Collections.singleton(new ApiKey("Authorization", "token", "header")));
    }
    private List<SecurityContext> securityContexts() {
        return new ArrayList(
                Collections.singleton(SecurityContext.builder()
                        .securityReferences(defaultAuth())
                        .forPaths(PathSelectors.regex("^(?!auth).*$"))
                        .build())
        );
    }
    List<SecurityReference> defaultAuth() {
        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
        authorizationScopes[0] = authorizationScope;
        return new ArrayList(
                Collections.singleton(new SecurityReference("Authorization", authorizationScopes)));
    }	

}

MVC配置

@Configuration
public class CorsConfig implements WebMvcConfigurer {

	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
		// api/swagger/为新的访问地址, 就是在MVChandler里添加映射关系,访问这个地址会找到META-INF/RESOURCES下的静态资源
		registry.addResourceHandler("/api/swagger/**").addResourceLocations("classpath:/META-INF/resources/");
	}
	//配置跨域访问
	@Override
	public void addCorsMappings(CorsRegistry registry) {
				        registry.addMapping("/**")	// 允许跨域访问的路径
				        .allowedOrigins("*")	// 允许跨域访问的源
				        .allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE")	// 允许请求方法
				        .maxAge(168000)	// 预检间隔时间
				        .allowedHeaders("*")  // 允许头部设置
				        .allowCredentials(true);	// 是否发送cookie
	}
}

controller

@Controller
public class SwaggerController {
 //因为SWAGGER需要JS和静态文件进行打开所以也必须要做相对应的指向
    @GetMapping("/api/swagger/swagger-resources")
    public String resource() {
        return "forward:/swagger-resources";
    }
 
    @GetMapping("/api/swagger/swagger-resources/configuration/ui")
    public String ui() {
        return "forward:/swagger-resources/configuration/ui";
    }
 
    @GetMapping("/api/swagger/v2/api-docs")
    public String doc() {
        return "forward:/v2/api-docs";
    }
    @GetMapping("/api/swagger/swagger-resources/configuration/security")
    public String security() {
        return "forward:/swagger-resources/configuration/security";
    }
    //屏蔽原有的SWAGGER-UI.HTML地址,此只做简单处理,可以利用JSON返回和谐错误提示。
    @ResponseBody
    @GetMapping("swagger-ui.html")
    public String swagger() {
    	return "Wrong Page Please try later!";
    }
    
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值