Browse Source

跨域、swagger增加token

tianyabing 2 years ago
parent
commit
d30a2912c8

+ 32 - 0
src/main/java/com/sky/ioc/config/CorsConfig.java

@@ -0,0 +1,32 @@
+package com.sky.ioc.config;
+
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.cors.CorsConfiguration;
+import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
+import org.springframework.web.filter.CorsFilter;
+
+@Configuration
+public class CorsConfig {
+
+    @Bean
+    public CorsFilter corsFilter() {
+        CorsConfiguration corsConfiguration = new CorsConfiguration();
+        // 设置允许跨域请求的域名
+        corsConfiguration.addAllowedOriginPattern("*");
+        // 设置允许跨域请求头
+        corsConfiguration.addAllowedHeader("*");
+        // 设置允许的方法
+        corsConfiguration.addAllowedMethod("*");
+        // 是否允许证书
+        corsConfiguration.setAllowCredentials(true);
+        // 跨域允许时间
+        corsConfiguration.setMaxAge(3600L);
+
+        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
+        source.registerCorsConfiguration("/**", corsConfiguration);
+        return new CorsFilter(source);
+    }
+
+}

+ 28 - 4
src/main/java/com/sky/ioc/config/SwaggerConfig.java

@@ -1,6 +1,7 @@
 package com.sky.ioc.config;
 
 import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.enums.SecuritySchemeIn;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -8,11 +9,15 @@ import springfox.documentation.builders.ApiInfoBuilder;
 import springfox.documentation.builders.PathSelectors;
 import springfox.documentation.builders.RequestHandlerSelectors;
 import springfox.documentation.oas.annotations.EnableOpenApi;
-import springfox.documentation.service.ApiInfo;
-import springfox.documentation.service.Contact;
+import springfox.documentation.service.*;
 import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spi.service.contexts.SecurityContext;
 import springfox.documentation.spring.web.plugins.Docket;
 
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
 /**
  * Swagger的接口配置
  */
@@ -35,7 +40,9 @@ public class SwaggerConfig {
                 .apiInfo(apiInfo())
                 .select()
                 .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
-                .paths(PathSelectors.any()).build();
+                .paths(PathSelectors.any()).build().securityContexts(Arrays.asList(securityContext()))
+                // ApiKey的name需与SecurityReference的reference保持一致
+                .securitySchemes(Arrays.asList(new ApiKey("token", "token", SecuritySchemeIn.HEADER.name())));
     }
 
     /**
@@ -51,6 +58,23 @@ public class SwaggerConfig {
                 // 作者信息
                 .contact(new Contact(SkyConfig.getName(), null, null))
                 // 版本
-                .version("版本号:" + SkyConfig.getVersion()).build();
+                .version("版本号:" + SkyConfig.getVersion())
+                .build();
+    }
+
+    private SecurityContext securityContext() {
+        return SecurityContext.builder()
+                .securityReferences(defaultAuth())
+                //.forPaths(PathSelectors.regex("/*.*"))
+                .build();
     }
+    private List<SecurityReference> defaultAuth() {
+        AuthorizationScope authorizationScope
+                = new AuthorizationScope("global", "accessEverything");
+        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
+        authorizationScopes[0] = authorizationScope;
+        return Collections.singletonList(
+                new SecurityReference("token", authorizationScopes));
+    }
+
 }