From eadd9e90dd9d9c5be5bac027c2c36130f30e650c Mon Sep 17 00:00:00 2001 From: Your Name Date: Wed, 28 Dec 2022 18:49:33 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B4=E5=90=88knife4j-3.0.3=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/jnpf/LinkageAdminApplication.java | 1 + .../java/jnpf/filter/WebFilterConfig.java | 20 +++ SC-boot/linkage-common/pom.xml | 17 +- .../main/java/jnpf/config/Knife4jConfig.java | 18 +- .../main/java/jnpf/config/Swagger3Config.java | 15 +- .../main/java/jnpf/config/SwaggerConfig.java | 166 +++++++++--------- .../main/java/jnpf/config/SecurityConfig.java | 40 ++++- SC-boot/linkage-system/pom.xml | 8 +- SC-boot/pom.xml | 20 +-- 9 files changed, 180 insertions(+), 125 deletions(-) diff --git a/SC-boot/linkage-admin/src/main/java/jnpf/LinkageAdminApplication.java b/SC-boot/linkage-admin/src/main/java/jnpf/LinkageAdminApplication.java index bec9c6aa..37be4554 100644 --- a/SC-boot/linkage-admin/src/main/java/jnpf/LinkageAdminApplication.java +++ b/SC-boot/linkage-admin/src/main/java/jnpf/LinkageAdminApplication.java @@ -29,6 +29,7 @@ import java.util.concurrent.ConcurrentHashMap; */ @SpringBootApplication(scanBasePackages = "jnpf",exclude={DataSourceAutoConfiguration.class}) @EnableScheduling + public class LinkageAdminApplication extends SpringBootServletInitializer implements CommandLineRunner { public static void main(String[] args) { diff --git a/SC-boot/linkage-admin/src/main/java/jnpf/filter/WebFilterConfig.java b/SC-boot/linkage-admin/src/main/java/jnpf/filter/WebFilterConfig.java index 270e196d..ee584192 100644 --- a/SC-boot/linkage-admin/src/main/java/jnpf/filter/WebFilterConfig.java +++ b/SC-boot/linkage-admin/src/main/java/jnpf/filter/WebFilterConfig.java @@ -3,6 +3,7 @@ package jnpf.filter; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import java.util.ArrayList; @@ -25,7 +26,24 @@ public class WebFilterConfig implements WebMvcConfigurer { //不拦截的路径 registration.excludePathPatterns(excludePath()); } + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + + registry.addResourceHandler("/**").addResourceLocations("classpath:/static/"); + /** 配置knife4j 显示文档 */ + registry.addResourceHandler("doc.html") + .addResourceLocations("classpath:/META-INF/resources/"); + + /** + * 配置swagger-ui显示文档 + */ + registry.addResourceHandler("swagger-ui.html") + .addResourceLocations("classpath:/META-INF/resources/"); + /** 公共部分内容 */ + registry.addResourceHandler("/webjars/**") + .addResourceLocations("classpath:/META-INF/resources/webjars/"); + } private List excludePath (){ List list = new ArrayList<>(); list.add("/api/oauth/Login"); @@ -62,6 +80,8 @@ public class WebFilterConfig implements WebMvcConfigurer { list.add("/api/system/DataInterface/{id}/Actions/Response"); list.add("/api/oauth/ImageCode/{codeLength}/{timestamp}"); list.add("/api/oauth/getConfig/{account}"); + list.add("/error"); + list.add("/favicon.ico"); return list; } diff --git a/SC-boot/linkage-common/pom.xml b/SC-boot/linkage-common/pom.xml index f405158d..4d14bc16 100644 --- a/SC-boot/linkage-common/pom.xml +++ b/SC-boot/linkage-common/pom.xml @@ -40,10 +40,10 @@ com.fasterxml.jackson.module jackson-module-jaxb-annotations - - io.springfox - springfox-boot-starter - + + + + org.apache.tomcat.embed tomcat-embed-core @@ -173,9 +173,16 @@ com.github.pagehelper pagehelper + + + + + + + com.github.xiaoymin - knife4j-spring-boot-autoconfigure + knife4j-spring-boot-starter 3.0.3 diff --git a/SC-boot/linkage-common/src/main/java/jnpf/config/Knife4jConfig.java b/SC-boot/linkage-common/src/main/java/jnpf/config/Knife4jConfig.java index edf18af4..2366f8db 100644 --- a/SC-boot/linkage-common/src/main/java/jnpf/config/Knife4jConfig.java +++ b/SC-boot/linkage-common/src/main/java/jnpf/config/Knife4jConfig.java @@ -4,6 +4,8 @@ package jnpf.config; import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import springfox.bean.validators.configuration.BeanValidatorPluginsConfiguration; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; @@ -14,25 +16,25 @@ import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; @Configuration -@EnableOpenApi -// @EnableKnife4j -// @EnableSwagger2 +@EnableSwagger2 //开启 Swagger2 +@EnableKnife4j //开启 knife4j,可以不写 +@Import(BeanValidatorPluginsConfiguration.class) public class Knife4jConfig { @Bean public Docket docket() { Docket docket = new Docket(DocumentationType.OAS_30) .apiInfo(new ApiInfoBuilder() - .title("我的标题") - .description("我的描述") - // .termsOfServiceUrl("http://www.xx.com/") - .contact(new Contact("knife", "https://knife.blog.csdn.net/", "xx@qq.com")) + .title("低代码开发平台接口文档") + .description("项目描述") + // .termsOfServiceUrl("http://www.linkage.top/") + //.contact(new Contact("knife", "https://knife.blog.csdn.net/", "xx@qq.com")) .version("1.0") .build()) // 分组名称 .groupName("all") .select() // 这里指定Controller扫描包路径 - .apis(RequestHandlerSelectors.basePackage("jnpf.permission.controller")) + .apis(RequestHandlerSelectors.basePackage("jnpf")) .paths(PathSelectors.any()) .build(); diff --git a/SC-boot/linkage-common/src/main/java/jnpf/config/Swagger3Config.java b/SC-boot/linkage-common/src/main/java/jnpf/config/Swagger3Config.java index 8babfc68..3d852c41 100644 --- a/SC-boot/linkage-common/src/main/java/jnpf/config/Swagger3Config.java +++ b/SC-boot/linkage-common/src/main/java/jnpf/config/Swagger3Config.java @@ -11,7 +11,15 @@ //import springfox.documentation.service.Contact; //import springfox.documentation.spi.DocumentationType; //import springfox.documentation.spring.web.plugins.Docket; -// +///** +// * @author :jerry +// * @date :Created in 2022/5/28 10:30 +// * @description: +// * @version: V1.1 +// * *Swagger3API文档的配置 +// * knife4j文档地址(端口号根据自己项目配置): http://localhost:8081/doc.html# +// * swagger文档地址(端口号根据自己项目配置):http://localhost:8081/swagger-ui/index.html#/ +// */ //@Configuration //@EnableOpenApi //@EnableKnife4j @@ -34,11 +42,10 @@ // return new ApiInfoBuilder() // .title("SwaggerUI接口文档") // .description("接口文档Swagger-Bootstrap版") -// .termsOfServiceUrl("http://localhost:30000/swagger-ui/index.html#/") -// .contact(new Contact("jerry","http://localhost:30000/doc.html#", "13258239832@163.com")) +// .termsOfServiceUrl("http://localhost:8081/swagger-ui/index.html#/") +// .contact(new Contact("jerry","http://localhost:8081/doc.html#", "13258239832@163.com")) // .version("1.0") // .license("jerry") // .build(); // } -// //} diff --git a/SC-boot/linkage-common/src/main/java/jnpf/config/SwaggerConfig.java b/SC-boot/linkage-common/src/main/java/jnpf/config/SwaggerConfig.java index 09607656..c4206b65 100644 --- a/SC-boot/linkage-common/src/main/java/jnpf/config/SwaggerConfig.java +++ b/SC-boot/linkage-common/src/main/java/jnpf/config/SwaggerConfig.java @@ -1,83 +1,83 @@ -package jnpf.config; - -import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j; -import io.swagger.annotations.ApiOperation; -import jnpf.util.Constants; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -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.*; -import springfox.documentation.spi.DocumentationType; -import springfox.documentation.spi.service.contexts.SecurityContext; -import springfox.documentation.spring.web.plugins.Docket; - -import java.util.ArrayList; -import java.util.List; - -/** - * - * @author Allen Pan - * @version V3.4.1 - * @copyright 长江云息 - * @date 2021/3/16 8:56 - */ -@Configuration -@EnableOpenApi -@EnableKnife4j -public class SwaggerConfig { - - @Bean - public Docket loginApi() { - return new Docket(DocumentationType.OAS_30) - .apiInfo(apiInfo()) - .pathMapping("/") - .select() // 选择那些路径和api会生成document - .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) - //不显示错误的接口地址 - .build() - .securitySchemes(securitySchemes()) - .securityContexts(securityContexts()); - } - - /** - * 安全模式,这里指定token通过Authorization头请求头传递 - */ - private List securitySchemes() { - List apiKeyList = new ArrayList<>(); - apiKeyList.add(new ApiKey(Constants.AUTHORIZATION, Constants.AUTHORIZATION, "header")); - return apiKeyList; - } - - /** - * 授权信息全局应用 - */ - private List securityContexts() { - List securityContexts = new ArrayList<>(); - securityContexts.add(SecurityContext.builder() - .securityReferences(defaultAuth()) - .forPaths(PathSelectors.any()).build()); - return securityContexts; - } - - private List defaultAuth() { - AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything"); - AuthorizationScope[] authorizationScopes = new AuthorizationScope[1]; - authorizationScopes[0] = authorizationScope; - List securityReferences = new ArrayList<>(); - securityReferences.add(new SecurityReference("Authorization", authorizationScopes)); - return securityReferences; - } - - private ApiInfo apiInfo() { - return new ApiInfoBuilder() - .title("接口文档") - //描述 - .description("LINKAGE-BOOT接口文档") - .version(Constants.SWAGGER_VERSION) - .build(); - } - -} +//package jnpf.config; +// +//import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j; +//import io.swagger.annotations.ApiOperation; +//import jnpf.util.Constants; +//import org.springframework.context.annotation.Bean; +//import org.springframework.context.annotation.Configuration; +//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.*; +//import springfox.documentation.spi.DocumentationType; +//import springfox.documentation.spi.service.contexts.SecurityContext; +//import springfox.documentation.spring.web.plugins.Docket; +// +//import java.util.ArrayList; +//import java.util.List; +// +///** +// * +// * @author Allen Pan +// * @version V3.4.1 +// * @copyright 长江云息 +// * @date 2021/3/16 8:56 +// */ +//@Configuration +//@EnableOpenApi +//@EnableKnife4j +//public class SwaggerConfig { +// +// @Bean +// public Docket loginApi() { +// return new Docket(DocumentationType.OAS_30) +// .apiInfo(apiInfo()) +// .pathMapping("/") +// .select() // 选择那些路径和api会生成document +// .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) +// //不显示错误的接口地址 +// .build() +// .securitySchemes(securitySchemes()) +// .securityContexts(securityContexts()); +// } +// +// /** +// * 安全模式,这里指定token通过Authorization头请求头传递 +// */ +// private List securitySchemes() { +// List apiKeyList = new ArrayList<>(); +// apiKeyList.add(new ApiKey(Constants.AUTHORIZATION, Constants.AUTHORIZATION, "header")); +// return apiKeyList; +// } +// +// /** +// * 授权信息全局应用 +// */ +// private List securityContexts() { +// List securityContexts = new ArrayList<>(); +// securityContexts.add(SecurityContext.builder() +// .securityReferences(defaultAuth()) +// .forPaths(PathSelectors.any()).build()); +// return securityContexts; +// } +// +// private List defaultAuth() { +// AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything"); +// AuthorizationScope[] authorizationScopes = new AuthorizationScope[1]; +// authorizationScopes[0] = authorizationScope; +// List securityReferences = new ArrayList<>(); +// securityReferences.add(new SecurityReference("Authorization", authorizationScopes)); +// return securityReferences; +// } +// +// private ApiInfo apiInfo() { +// return new ApiInfoBuilder() +// .title("接口文档") +// //描述 +// .description("LINKAGE-BOOT接口文档") +// .version(Constants.SWAGGER_VERSION) +// .build(); +// } +// +//} diff --git a/SC-boot/linkage-oauth/src/main/java/jnpf/config/SecurityConfig.java b/SC-boot/linkage-oauth/src/main/java/jnpf/config/SecurityConfig.java index 294be1e1..8d4b1215 100644 --- a/SC-boot/linkage-oauth/src/main/java/jnpf/config/SecurityConfig.java +++ b/SC-boot/linkage-oauth/src/main/java/jnpf/config/SecurityConfig.java @@ -10,6 +10,9 @@ import org.springframework.security.config.annotation.authentication.builders.Au import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; /** * @@ -20,13 +23,23 @@ import org.springframework.security.config.annotation.web.configuration.WebSecur */ @Configuration @EnableWebSecurity -public class SecurityConfig extends WebSecurityConfigurerAdapter { +public class SecurityConfig extends WebSecurityConfigurerAdapter implements WebMvcConfigurer { @Autowired - private UserDetailsServiceImpl userDetailsService; + //private UserDetailsServiceImpl userDetailsService; + private UserDetailsService userDetailsService; @Autowired private MyPasswordEncoder passwordEncoder; + private static final String[] URL_WHITELIST = { + "/favicon.ico", + "/webjars/**", + "/img.icons/**", + "/swagger-resources/**", + "/v3/api-docs/**", + "/swagger-ui/**", + "/doc.html", + }; /** * 配置请求路径 @@ -39,8 +52,29 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { http.headers().frameOptions().disable(); http.csrf().disable().authorizeRequests() .antMatchers("/RSA/publicKey").permitAll() - .antMatchers("/jmreport/**").anonymous(); + .antMatchers("/jmreport/**").anonymous() + // 配置拦截规则 + .and() + .authorizeRequests() + .antMatchers(URL_WHITELIST).permitAll() + .anyRequest().authenticated(); + } + @Bean + @Override + public AuthenticationManager authenticationManagerBean() throws Exception { + return super.authenticationManagerBean(); + } + + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("/**").addResourceLocations( + "classpath:/static/"); + registry.addResourceHandler("swagger-ui.html") + .addResourceLocations("classpath:/META-INF/resources/"); + registry.addResourceHandler("/webjars/**") + .addResourceLocations("classpath:/META-INF/resources/webjars/"); + registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/"); } /** diff --git a/SC-boot/linkage-system/pom.xml b/SC-boot/linkage-system/pom.xml index f726504c..adcff1d0 100644 --- a/SC-boot/linkage-system/pom.xml +++ b/SC-boot/linkage-system/pom.xml @@ -44,10 +44,10 @@ spring-boot-starter-aop - - io.springfox - springfox-boot-starter - + + + + com.baomidou diff --git a/SC-boot/pom.xml b/SC-boot/pom.xml index 16b13be3..ddc997dd 100644 --- a/SC-boot/pom.xml +++ b/SC-boot/pom.xml @@ -43,8 +43,8 @@ 3.4.1 3.5.1 8.0.29 - 1.8.0 - 2.0 + 1.0 + 1.0 42.2.23 4.0 21.5.0.0 @@ -95,17 +95,6 @@ import - - - com.github.xiaoymin - swagger-bootstrap-ui - ${swagger-ui.version} - - - io.springfox - springfox-boot-starter - ${swagger.version} - org.springframework.plugin spring-plugin-core @@ -438,11 +427,6 @@ signclient ${yozosign.version} - - com.github.xiaoymin - knife4j-spring-boot-starter - 3.0.2 -