diff --git a/build.gradle b/build.gradle index c0b70d578..49cd085a1 100644 --- a/build.gradle +++ b/build.gradle @@ -398,8 +398,10 @@ subprojects { implementation group: 'com.tencentcloudapi', name: 'tencentcloud-sdk-java', version: "${tencentcloudsdkjavaVersion}" //docs implementation group: 'org.mapstruct', name: 'mapstruct', version: "${mapstructVersion}" + implementation group: 'io.swagger.core.v3', name: 'swagger-annotations', version: "${swaggerV3Version}" implementation group: 'io.swagger.core.v3', name: 'swagger-annotations-jakarta', version: "${swaggerV3Version}" implementation group: 'io.swagger.core.v3', name: 'swagger-core-jakarta', version: "${swaggerV3Version}" + //implementation group: 'io.swagger.core.v3', name: 'swagger-models', version: "${swaggerV3Version}" implementation group: 'io.swagger.core.v3', name: 'swagger-models-jakarta', version: "${swaggerV3Version}" //springdoc implementation group: 'io.github.classgraph', name: 'classgraph', version: "${classgraphVersion}" diff --git a/gradle.properties b/gradle.properties index ee42b7b31..b78188f6d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -198,8 +198,8 @@ swaggerV3Version =2.2.21 classgraphVersion =4.8.149 webjarslocatorcoreVersion =0.58 webjarslocatorVersion =0.52 -swaggeruiVersion =5.17.2 -springdocVersion =2.5.0 +swaggeruiVersion =5.15.0 +springdocVersion =2.0.4 knife4jVersion =4.5.0 #sdk aliyunjavasdkcoreVersion =4.6.4 diff --git a/maxkey-core/src/main/java/org/dromara/maxkey/autoconfigure/MvcAutoConfiguration.java b/maxkey-core/src/main/java/org/dromara/maxkey/autoconfigure/MvcAutoConfiguration.java index 63664fd16..14854f1da 100644 --- a/maxkey-core/src/main/java/org/dromara/maxkey/autoconfigure/MvcAutoConfiguration.java +++ b/maxkey-core/src/main/java/org/dromara/maxkey/autoconfigure/MvcAutoConfiguration.java @@ -45,6 +45,7 @@ import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.http.converter.xml.MarshallingHttpMessageConverter; +import org.springframework.http.converter.ByteArrayHttpMessageConverter; import org.springframework.oxm.jaxb.Jaxb2Marshaller; import org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter; import org.springframework.web.client.RestTemplate; @@ -197,6 +198,10 @@ public class MvcAutoConfiguration implements WebMvcConfigurer { StringHttpMessageConverter stringHttpMessageConverter, RequestMappingHandlerAdapter requestMappingHandlerAdapter) { List> httpMessageConverterList = new ArrayList<>(); + //需要追加byte,否则springdoc-openapi接口会响应Base64编码内容,导致接口文档显示失败 + // https://github.com/springdoc/springdoc-openapi/issues/2143 + // 解决方案 + httpMessageConverterList.add(new ByteArrayHttpMessageConverter()); httpMessageConverterList.add(mappingJacksonHttpMessageConverter); httpMessageConverterList.add(marshallingHttpMessageConverter); httpMessageConverterList.add(stringHttpMessageConverter); diff --git a/maxkey-core/src/main/java/org/dromara/maxkey/autoconfigure/SwaggerAutoConfiguration.java b/maxkey-core/src/main/java/org/dromara/maxkey/autoconfigure/SwaggerAutoConfiguration.java index b139c80b7..e8c13654a 100644 --- a/maxkey-core/src/main/java/org/dromara/maxkey/autoconfigure/SwaggerAutoConfiguration.java +++ b/maxkey-core/src/main/java/org/dromara/maxkey/autoconfigure/SwaggerAutoConfiguration.java @@ -65,7 +65,7 @@ public class SwaggerAutoConfiguration { "/api/oauth/v20/me" }; - String[] packagedToMatch = { "org.maxkey.authz" }; + String[] packagedToMatch = { "org.dromara.maxkey.authz" }; return GroupedOpenApi.builder().group(title) .pathsToMatch(paths) .packagesToScan(packagedToMatch).build(); @@ -79,7 +79,7 @@ public class SwaggerAutoConfiguration { .title(title) .description(description) .version(version) - .termsOfService("http://www.maxkey.top/") + .termsOfService("https://www.maxkey.top/") .license( new License() .name("Apache License, Version 2.0") @@ -89,7 +89,7 @@ public class SwaggerAutoConfiguration { externalDocs( new ExternalDocumentation() .description("MaxKey.top contact support@maxsso.net") - .url("http://www.maxkey.top/") + .url("https://www.maxkey.top/") ); } } diff --git a/maxkey-core/src/main/resources/favicon.ico b/maxkey-core/src/main/resources/favicon.ico new file mode 100644 index 000000000..485a4a4ad Binary files /dev/null and b/maxkey-core/src/main/resources/favicon.ico differ diff --git a/maxkey-protocols/maxkey-protocol-extendapi/src/main/java/org/dromara/maxkey/authz/exapi/endpoint/ExtendApiAuthorizeEndpoint.java b/maxkey-protocols/maxkey-protocol-extendapi/src/main/java/org/dromara/maxkey/authz/exapi/endpoint/ExtendApiAuthorizeEndpoint.java index 5738b7a13..7e3ddf36c 100644 --- a/maxkey-protocols/maxkey-protocol-extendapi/src/main/java/org/dromara/maxkey/authz/exapi/endpoint/ExtendApiAuthorizeEndpoint.java +++ b/maxkey-protocols/maxkey-protocol-extendapi/src/main/java/org/dromara/maxkey/authz/exapi/endpoint/ExtendApiAuthorizeEndpoint.java @@ -32,8 +32,8 @@ import org.dromara.maxkey.util.Instance; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; import io.swagger.v3.oas.annotations.Operation; @@ -47,10 +47,10 @@ import jakarta.servlet.http.HttpServletRequest; @Tag(name = "2-8-ExtendApi接口文档模块") @Controller public class ExtendApiAuthorizeEndpoint extends AuthorizeBaseEndpoint{ - final static Logger _logger = LoggerFactory.getLogger(ExtendApiAuthorizeEndpoint.class); + static final Logger _logger = LoggerFactory.getLogger(ExtendApiAuthorizeEndpoint.class); - @Operation(summary = "ExtendApi认证地址接口", description = "参数应用ID",method="GET") - @RequestMapping("/authz/api/{id}") + @Operation(summary = "ExtendApi认证地址接口", description = "参数应用ID") + @GetMapping("/authz/api/{id}") public ModelAndView authorize( HttpServletRequest request, @PathVariable("id") String id, @@ -61,7 +61,7 @@ public class ExtendApiAuthorizeEndpoint extends AuthorizeBaseEndpoint{ modelAndView.addObject("errorMessage", ""); Apps apps = getApp(id); - _logger.debug(""+apps); + _logger.debug("{}" , apps); if(ConstsBoolean.isTrue(apps.getIsAdapter())){ _logger.debug("Adapter {}",apps.getAdapter()); AbstractAuthorizeAdapter adapter = (AbstractAuthorizeAdapter)Instance.newInstance(apps.getAdapter()); diff --git a/maxkey-protocols/maxkey-protocol-jwt/src/main/java/org/dromara/maxkey/authz/token/endpoint/JwtAuthorizeEndpoint.java b/maxkey-protocols/maxkey-protocol-jwt/src/main/java/org/dromara/maxkey/authz/token/endpoint/JwtAuthorizeEndpoint.java index 394b4f0b2..26f8b34d8 100644 --- a/maxkey-protocols/maxkey-protocol-jwt/src/main/java/org/dromara/maxkey/authz/token/endpoint/JwtAuthorizeEndpoint.java +++ b/maxkey-protocols/maxkey-protocol-jwt/src/main/java/org/dromara/maxkey/authz/token/endpoint/JwtAuthorizeEndpoint.java @@ -44,9 +44,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.ModelAndView; @@ -71,8 +70,8 @@ public class JwtAuthorizeEndpoint extends AuthorizeBaseEndpoint{ @Autowired ApplicationConfig applicationConfig; - @Operation(summary = "JWT应用ID认证接口", description = "应用ID",method="GET") - @RequestMapping("/authz/jwt/{id}") + @Operation(summary = "JWT应用ID认证接口", description = "应用ID") + @GetMapping("/authz/jwt/{id}") public ModelAndView authorize( HttpServletRequest request, HttpServletResponse response, @@ -110,10 +109,8 @@ public class JwtAuthorizeEndpoint extends AuthorizeBaseEndpoint{ return adapter.authorize(modelAndView); } - @Operation(summary = "JWT JWK元数据接口", description = "参数mxk_metadata_APPID",method="GET") - @RequestMapping( - value = "/metadata/jwt/" + WebConstants.MXK_METADATA_PREFIX + "{appid}.{mediaType}", - method={RequestMethod.POST, RequestMethod.GET}) + @Operation(summary = "JWT JWK元数据接口", description = "参数mxk_metadata_APPID") + @GetMapping(value = "/metadata/jwt/" + WebConstants.MXK_METADATA_PREFIX + "{appid}.{mediaType}") @ResponseBody public String metadata(HttpServletRequest request, HttpServletResponse response, diff --git a/maxkey-webs/maxkey-web-maxkey/src/main/java/org/dromara/maxkey/autoconfigure/MaxKeyMvcConfig.java b/maxkey-webs/maxkey-web-maxkey/src/main/java/org/dromara/maxkey/autoconfigure/MaxKeyMvcConfig.java index c79cccb09..f97282d03 100644 --- a/maxkey-webs/maxkey-web-maxkey/src/main/java/org/dromara/maxkey/autoconfigure/MaxKeyMvcConfig.java +++ b/maxkey-webs/maxkey-web-maxkey/src/main/java/org/dromara/maxkey/autoconfigure/MaxKeyMvcConfig.java @@ -111,6 +111,9 @@ public class MaxKeyMvcConfig implements WebMvcConfigurer { .addPathPatterns("/logout") .addPathPatterns("/logout/**") .addPathPatterns("/authz/refused") + .excludePathPatterns("/swagger-ui/**") + .excludePathPatterns("/swagger-resources/**") + .excludePathPatterns("/v3/api-docs/**") ; logger.debug("add Permission Interceptor"); diff --git a/maxkey-webs/maxkey-web-maxkey/src/main/java/org/dromara/maxkey/web/contorller/LoginEntryPoint.java b/maxkey-webs/maxkey-web-maxkey/src/main/java/org/dromara/maxkey/web/contorller/LoginEntryPoint.java index 6451b7f77..70a0d97a6 100644 --- a/maxkey-webs/maxkey-web-maxkey/src/main/java/org/dromara/maxkey/web/contorller/LoginEntryPoint.java +++ b/maxkey-webs/maxkey-web-maxkey/src/main/java/org/dromara/maxkey/web/contorller/LoginEntryPoint.java @@ -47,9 +47,11 @@ import org.springframework.http.ResponseEntity; import org.springframework.security.core.Authentication; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; @@ -61,7 +63,7 @@ import jakarta.servlet.http.HttpServletResponse; * */ @Tag(name = "1-1-登录接口文档模块") -@Controller +@RestController @RequestMapping(value = "/login") public class LoginEntryPoint { private static Logger logger = LoggerFactory.getLogger(LoginEntryPoint.class); @@ -213,7 +215,8 @@ public class LoginEntryPoint { * @param loginCredential * @return */ - @RequestMapping(value={"/signin"}, produces = {MediaType.APPLICATION_JSON_VALUE}) + @Operation(summary = "登录接口", description = "登录接口",method="POST") + @PostMapping(value={"/signin"}, produces = {MediaType.APPLICATION_JSON_VALUE}) public ResponseEntity signin( HttpServletRequest request, HttpServletResponse response, @RequestBody LoginCredential credential) { Message authJwtMessage = new Message(Message.FAIL); diff --git a/maxkey-webs/maxkey-web-maxkey/src/main/resources/application-maxkey.properties b/maxkey-webs/maxkey-web-maxkey/src/main/resources/application-maxkey.properties index 0dafdf574..4145e1693 100644 --- a/maxkey-webs/maxkey-web-maxkey/src/main/resources/application-maxkey.properties +++ b/maxkey-webs/maxkey-web-maxkey/src/main/resources/application-maxkey.properties @@ -292,7 +292,7 @@ springdoc.swagger-ui.showExtensions =true springdoc.api-docs.path =/v3/api-docs springdoc.group-configs[0].group =default springdoc.group-configs[0].paths-to-match =/* -springdoc.group-configs[0].packages-to-scan =org.maxkey +springdoc.group-configs[0].packages-to-scan =org.dromara.maxkey knife4j.enable =true knife4j.setting.language =zh_cn diff --git a/maxkey-webs/maxkey-web-mgt/src/main/resources/application-maxkey-mgt.properties b/maxkey-webs/maxkey-web-mgt/src/main/resources/application-maxkey-mgt.properties index f394c0f9a..351fc7d68 100644 --- a/maxkey-webs/maxkey-web-mgt/src/main/resources/application-maxkey-mgt.properties +++ b/maxkey-webs/maxkey-web-mgt/src/main/resources/application-maxkey-mgt.properties @@ -225,7 +225,7 @@ springdoc.swagger-ui.showExtensions =true springdoc.api-docs.path =/v3/api-docs springdoc.group-configs[0].group =default springdoc.group-configs[0].paths-to-match =/* -springdoc.group-configs[0].packages-to-scan =org.maxkey +springdoc.group-configs[0].packages-to-scan =org.dromara.maxkey knife4j.enable =true knife4j.setting.language =zh_cn diff --git a/maxkey-webs/maxkey-web-openapi/src/main/resources/application-maxkey-openapi.properties b/maxkey-webs/maxkey-web-openapi/src/main/resources/application-maxkey-openapi.properties index db27a5de0..5209a8076 100644 --- a/maxkey-webs/maxkey-web-openapi/src/main/resources/application-maxkey-openapi.properties +++ b/maxkey-webs/maxkey-web-openapi/src/main/resources/application-maxkey-openapi.properties @@ -225,7 +225,7 @@ springdoc.swagger-ui.showExtensions =true springdoc.api-docs.path =/v3/api-docs springdoc.group-configs[0].group =default springdoc.group-configs[0].paths-to-match =/* -springdoc.group-configs[0].packages-to-scan =org.maxkey +springdoc.group-configs[0].packages-to-scan =org.dromara.maxkey knife4j.enable =true knife4j.setting.language =zh_cn