diff --git a/ice-auth/pom.xml b/ice-auth/pom.xml
index ab3dfa038c860431706f685098d90eedea2d7547..fe466685a5691c1ccbd5fae5256feea31b29fd3b 100644
--- a/ice-auth/pom.xml
+++ b/ice-auth/pom.xml
@@ -52,6 +52,12 @@
0.0.1-SNAPSHOT
+
+ com.icedevcloud
+ ice-common-swagger
+ 0.0.1-SNAPSHOT
+
+
com.icedevcloud
ice-upms-api
diff --git a/ice-auth/src/main/java/com/icedevcloud/auth/config/WebSecurityConfig.java b/ice-auth/src/main/java/com/icedevcloud/auth/config/WebSecurityConfig.java
index d0efa1cd9a15fb412686916988dde00f69f50852..cb7de38073bba83934e5b083d5f3c801bf3220fd 100644
--- a/ice-auth/src/main/java/com/icedevcloud/auth/config/WebSecurityConfig.java
+++ b/ice-auth/src/main/java/com/icedevcloud/auth/config/WebSecurityConfig.java
@@ -5,7 +5,6 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.annotation.Order;
import org.springframework.security.authentication.AuthenticationManager;
-import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
@@ -18,8 +17,8 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
- .antMatchers(
- "/actuator/**", "/image-code/**").permitAll()
+ .antMatchers("/actuator/**", "/image-code/**",
+ "/doc.html", "/swagger-resources", "/swagger-resources/configuration", "/v3/api-docs", "/v2/api-docs", "/webjars/**").permitAll()
.anyRequest().authenticated()
.and().csrf().disable();
}
diff --git a/ice-auth/src/main/resources/bootstrap.yml b/ice-auth/src/main/resources/bootstrap.yml
index 2ab96e4dbd998260a12b84451fbc5c26fe265ce2..616cb2e8d71144478e2d4e60bcc9b283482c26bb 100644
--- a/ice-auth/src/main/resources/bootstrap.yml
+++ b/ice-auth/src/main/resources/bootstrap.yml
@@ -19,6 +19,17 @@ spring:
pathmatch:
matching-strategy: ANT_PATH_MATCHER
+knife4j:
+ enable: true
+ basic:
+ enable: true
+ username: admin
+ password: 123456
+ description: ${project.description}
+ serviceUrl: https://gitee.com/icedevcloud
+ version: ${project.version}
+ production: false
+
management:
endpoints:
web:
diff --git a/ice-common/ice-common-swagger/pom.xml b/ice-common/ice-common-swagger/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..57352da5447924b71641e82af6b21852607aaabd
--- /dev/null
+++ b/ice-common/ice-common-swagger/pom.xml
@@ -0,0 +1,40 @@
+
+
+ 4.0.0
+
+ com.icedevcloud
+ ice-common
+ 0.0.1-SNAPSHOT
+
+
+ ice-common-swagger
+ jar
+
+ ice-common-swagger
+
+
+
+ org.springframework.boot
+ spring-boot-autoconfigure
+ provided
+
+
+
+ org.springframework
+ spring-web
+ provided
+
+
+
+ com.github.xiaoymin
+ knife4j-spring
+
+
+
+ com.github.xiaoymin
+ knife4j-spring-ui
+
+
+
+
diff --git a/ice-common/ice-common-swagger/src/main/java/com/icedevcloud/common/swagger/Knife4jAutoConfiguration.java b/ice-common/ice-common-swagger/src/main/java/com/icedevcloud/common/swagger/Knife4jAutoConfiguration.java
new file mode 100644
index 0000000000000000000000000000000000000000..a1e36ac1f4f213769437618f4a4c430953feb137
--- /dev/null
+++ b/ice-common/ice-common-swagger/src/main/java/com/icedevcloud/common/swagger/Knife4jAutoConfiguration.java
@@ -0,0 +1,140 @@
+package com.icedevcloud.common.swagger;
+
+import com.github.xiaoymin.knife4j.spring.filter.ProductionSecurityFilter;
+import com.github.xiaoymin.knife4j.spring.filter.SecurityBasicAuthFilter;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.env.Environment;
+import org.springframework.web.cors.CorsConfiguration;
+import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
+import org.springframework.web.filter.CorsFilter;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
+
+/**
+ * Knife4jAutoConfiguration
+ *
+ * @author XiaoBingBy
+ * @since 2022-03-02
+ */
+@Slf4j
+@Configuration
+@EnableSwagger2WebMvc
+@EnableConfigurationProperties({Knife4jProperties.class})
+@ConditionalOnProperty(name = "knife4j.enable", havingValue = "true")
+public class Knife4jAutoConfiguration {
+
+ @Autowired
+ private Environment environment;
+
+ @Bean(value = "defaultApi2")
+ @ConditionalOnMissingBean
+ @ConditionalOnProperty(name = "knife4j.enable", havingValue = "true")
+ public Docket defaultApi2(Knife4jProperties knife4jProperties) {
+ String title = environment.getProperty("spring.application.name");
+ Docket docket = new Docket(DocumentationType.SWAGGER_2)
+ .apiInfo(new ApiInfoBuilder()
+ .title(title)
+ .description(knife4jProperties.getDescription())
+ .termsOfServiceUrl(knife4jProperties.getServiceUrl())
+ .contact("IceDevCloud")
+ .version(knife4jProperties.getVersion())
+ .build())
+ .select()
+ .apis(RequestHandlerSelectors.basePackage(knife4jProperties.getBasePackage()))
+ .paths(PathSelectors.any())
+ .build();
+ return docket;
+ }
+
+ /**
+ * 配置Cors
+ *
+ * @return
+ * @since 2.0.4
+ */
+ @Bean("knife4jCorsFilter")
+ @ConditionalOnMissingBean(CorsFilter.class)
+ @ConditionalOnProperty(name = "knife4j.cors", havingValue = "true")
+ public CorsFilter corsFilter() {
+ log.info("init CorsFilter...");
+ UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
+ CorsConfiguration corsConfiguration = new CorsConfiguration();
+ corsConfiguration.setAllowCredentials(true);
+ corsConfiguration.addAllowedOrigin("*");
+ corsConfiguration.addAllowedHeader("*");
+ corsConfiguration.addAllowedMethod("*");
+ corsConfiguration.setMaxAge(10000L);
+ //匹配所有API
+ source.registerCorsConfiguration("/**", corsConfiguration);
+ CorsFilter corsFilter = new CorsFilter(source);
+ return corsFilter;
+ }
+
+ @Bean
+ @ConditionalOnMissingBean(SecurityBasicAuthFilter.class)
+ @ConditionalOnProperty(name = "knife4j.basic.enable", havingValue = "true")
+ public SecurityBasicAuthFilter securityBasicAuthFilter(Knife4jProperties knife4jProperties) {
+ boolean enableSwaggerBasicAuth = false;
+ String dftUserName = "admin", dftPass = "123321";
+ SecurityBasicAuthFilter securityBasicAuthFilter = null;
+ if (knife4jProperties == null) {
+ if (environment != null) {
+ String enableAuth = environment.getProperty("knife4j.basic.enable");
+ enableSwaggerBasicAuth = Boolean.valueOf(enableAuth);
+ if (enableSwaggerBasicAuth) {
+ //如果开启basic验证,从配置文件中获取用户名和密码
+ String pUser = environment.getProperty("knife4j.basic.username");
+ String pPass = environment.getProperty("knife4j.basic.password");
+ if (pUser != null && !"".equals(pUser)) {
+ dftUserName = pUser;
+ }
+ if (pPass != null && !"".equals(pPass)) {
+ dftPass = pPass;
+ }
+ }
+ securityBasicAuthFilter = new SecurityBasicAuthFilter(enableSwaggerBasicAuth, dftUserName, dftPass);
+ }
+ } else {
+ //判断非空
+ if (knife4jProperties.getBasic() == null) {
+ securityBasicAuthFilter = new SecurityBasicAuthFilter(enableSwaggerBasicAuth, dftUserName, dftPass);
+ } else {
+ securityBasicAuthFilter = new SecurityBasicAuthFilter(knife4jProperties.getBasic().isEnable(), knife4jProperties.getBasic().getUsername(), knife4jProperties.getBasic().getPassword());
+ }
+ }
+ return securityBasicAuthFilter;
+ }
+
+ @Bean
+ @ConditionalOnMissingBean(ProductionSecurityFilter.class)
+ @ConditionalOnProperty(name = "knife4j.production", havingValue = "true")
+ public ProductionSecurityFilter productionSecurityFilter(Knife4jProperties knife4jProperties) {
+ boolean prod = false;
+ ProductionSecurityFilter p = null;
+ if (knife4jProperties == null) {
+ if (environment != null) {
+ String prodStr = environment.getProperty("knife4j.production");
+ if (log.isDebugEnabled()) {
+ log.debug("swagger.production:{}", prodStr);
+ }
+ prod = Boolean.valueOf(prodStr);
+ }
+ p = new ProductionSecurityFilter(prod);
+ } else {
+ p = new ProductionSecurityFilter(knife4jProperties.isProduction());
+ }
+
+ return p;
+ }
+
+}
diff --git a/ice-common/ice-common-swagger/src/main/java/com/icedevcloud/common/swagger/Knife4jHttpBasic.java b/ice-common/ice-common-swagger/src/main/java/com/icedevcloud/common/swagger/Knife4jHttpBasic.java
new file mode 100644
index 0000000000000000000000000000000000000000..49e5db4fad3fd59e8678263e1558e7e729465406
--- /dev/null
+++ b/ice-common/ice-common-swagger/src/main/java/com/icedevcloud/common/swagger/Knife4jHttpBasic.java
@@ -0,0 +1,50 @@
+package com.icedevcloud.common.swagger;
+
+/**
+ * Knife4jHttpBasic
+ *
+ * @author XiaoBingBy
+ * @since 2022-03-02
+ */
+public class Knife4jHttpBasic {
+
+ /**
+ * basick是否开启,默认为false
+ */
+ private boolean enable=false;
+
+ /**
+ * basic 用户名
+ */
+ private String username;
+
+ /**
+ * basic 密码
+ */
+ private String password;
+
+ public boolean isEnable() {
+ return enable;
+ }
+
+ public void setEnable(boolean enable) {
+ this.enable = enable;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+}
diff --git a/ice-common/ice-common-swagger/src/main/java/com/icedevcloud/common/swagger/Knife4jProperties.java b/ice-common/ice-common-swagger/src/main/java/com/icedevcloud/common/swagger/Knife4jProperties.java
new file mode 100644
index 0000000000000000000000000000000000000000..87683a303b2a69e7c2dbe7b28592a2423c4f402f
--- /dev/null
+++ b/ice-common/ice-common-swagger/src/main/java/com/icedevcloud/common/swagger/Knife4jProperties.java
@@ -0,0 +1,57 @@
+package com.icedevcloud.common.swagger;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * Knife4jProperties
+ *
+ * @author XiaoBingBy
+ * @since 2022-03-02
+ */
+@Component
+@ConfigurationProperties(prefix = "knife4j")
+@Data
+public class Knife4jProperties {
+
+ /**
+ * 是否开启Knife4j增强模式
+ */
+ private boolean enable = false;
+ /**
+ * 是否开启默认跨域
+ */
+ private boolean cors = false;
+
+ /**
+ * 是否开启BasicHttp验证
+ */
+ private Knife4jHttpBasic basic;
+
+ /**
+ * 简介
+ */
+ private String description;
+
+ /**
+ * 服务Url
+ */
+ private String serviceUrl;
+
+ /**
+ * 版本
+ */
+ private String version;
+
+ /**
+ * 是否生产环境
+ */
+ private boolean production = false;
+
+ /**
+ * 基础包
+ */
+ private String basePackage = "com.icedevcloud";
+
+}
diff --git a/ice-common/ice-common-swagger/src/main/resources/META-INF/spring.factories b/ice-common/ice-common-swagger/src/main/resources/META-INF/spring.factories
new file mode 100644
index 0000000000000000000000000000000000000000..938462b679bd87f1ae08af25865098d2c29162a9
--- /dev/null
+++ b/ice-common/ice-common-swagger/src/main/resources/META-INF/spring.factories
@@ -0,0 +1,3 @@
+# Auto Configure
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
+com.icedevcloud.common.swagger.Knife4jAutoConfiguration
\ No newline at end of file
diff --git a/ice-common/pom.xml b/ice-common/pom.xml
index f069569220ddfd60a271004c443522063c5c503f..b7c1321ef809b3f11812f7f0b58d4b120fe8279e 100644
--- a/ice-common/pom.xml
+++ b/ice-common/pom.xml
@@ -16,6 +16,7 @@
ice-common-core
+ ice-common-swagger
diff --git a/ice-upms/ice-upms-service/pom.xml b/ice-upms/ice-upms-service/pom.xml
index 250791f29b3d9b3e59337103b52ca4e522d51dec..6542a29ca4486e0ab474c17f56b9bed16384c0a1 100644
--- a/ice-upms/ice-upms-service/pom.xml
+++ b/ice-upms/ice-upms-service/pom.xml
@@ -42,6 +42,12 @@
spring-boot-starter-mail
+
+ com.icedevcloud
+ ice-common-swagger
+ 0.0.1-SNAPSHOT
+
+
org.springframework.boot
spring-boot-starter-test
diff --git a/ice-upms/ice-upms-service/src/main/resources/bootstrap.yml b/ice-upms/ice-upms-service/src/main/resources/bootstrap.yml
index a7b50dc347094344791cef4d73a03f612693eb48..6a0c077b5b928f39d24e7c4806635ab9afca2a7e 100644
--- a/ice-upms/ice-upms-service/src/main/resources/bootstrap.yml
+++ b/ice-upms/ice-upms-service/src/main/resources/bootstrap.yml
@@ -18,15 +18,22 @@ spring:
mvc:
pathmatch:
matching-strategy: ANT_PATH_MATCHER
- boot:
- admin:
- client:
- url: http://localhost:1024
mail:
host: smtp.163.com
username: fanshuye1304@163.com
password: fanshuye1304
+knife4j:
+ enable: true
+ basic:
+ enable: true
+ username: admin
+ password: 123456
+ description: ${project.description}
+ serviceUrl: https://gitee.com/icedevcloud
+ version: ${project.version}
+ production: false
+
management:
endpoints:
web:
diff --git a/pom.xml b/pom.xml
index 5330f94f532d7ce3a0576f3625725dc8d99874f1..6f13787074fe3c91dd65435f1da7b22509340504 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,12 +31,11 @@
2.1.18.RELEASE
3.2.0
3.3.1
- 4.5.10
+ 5.7.22
2.2.2
- 2.9.2
- 1.5.20
- 1.9.6
- 1.18.8
+ 1.5.22
+ 2.0.7
+ 1.18.22
@@ -112,9 +111,15 @@
- io.springfox
- springfox-swagger2
- ${swagger2.version}
+ com.github.xiaoymin
+ knife4j-spring
+ ${knife4j.version}
+
+
+
+ com.github.xiaoymin
+ knife4j-spring-ui
+ ${knife4j.version}