Commit efe7d785 by renyizhao

api应用问题

parent 9ce300cd
package com.luhu.computility.module.apihub.signature.config; package com.luhu.computility.module.apihub.signature.config;
import com.luhu.computility.framework.redis.config.ComputilityRedisAutoConfiguration;
import com.luhu.computility.module.apihub.signature.core.aop.ApiHubApiSignatureAspect;
import com.luhu.computility.module.apihub.signature.core.redis.ApiHubApiSignatureRedisDAO;
import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.StringRedisTemplate;
/** /**
* HTTP API 签名的自动配置类 * HTTP API 签名的自动配置类
* <p>
* 注意:ApiHubApiSignatureAspect 和 ApiHubApiSignatureRedisDAO 已通过 @Component 注解注册,
* 此处不再通过 @Bean 工厂方法创建,避免重复定义冲突。
* *
* @author Zhougang * @author Zhougang
*/ */
@AutoConfiguration(after = ComputilityRedisAutoConfiguration.class) @Configuration
@AutoConfiguration
public class ComputilityApiHubApiSignatureAutoConfiguration { public class ComputilityApiHubApiSignatureAutoConfiguration {
@Bean
public ApiHubApiSignatureAspect signatureAspect(ApiHubApiSignatureRedisDAO signatureRedisDAO) {
return new ApiHubApiSignatureAspect(signatureRedisDAO);
}
@Bean
public ApiHubApiSignatureRedisDAO signatureRedisDAO(StringRedisTemplate stringRedisTemplate) {
return new ApiHubApiSignatureRedisDAO(stringRedisTemplate);
}
} }
...@@ -9,6 +9,7 @@ import cn.hutool.core.util.StrUtil; ...@@ -9,6 +9,7 @@ import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.digest.DigestUtil; import cn.hutool.crypto.digest.DigestUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.luhu.computility.framework.common.exception.ServiceException; import com.luhu.computility.framework.common.exception.ServiceException;
import com.luhu.computility.framework.common.exception.enums.GlobalErrorCodeConstants;
import com.luhu.computility.framework.common.pojo.CommonResult; import com.luhu.computility.framework.common.pojo.CommonResult;
import com.luhu.computility.framework.common.util.servlet.ServletUtils; import com.luhu.computility.framework.common.util.servlet.ServletUtils;
import com.luhu.computility.module.apihub.api.apicalllog.ApiCallLogApi; import com.luhu.computility.module.apihub.api.apicalllog.ApiCallLogApi;
...@@ -26,6 +27,7 @@ import lombok.extern.slf4j.Slf4j; ...@@ -26,6 +27,7 @@ import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
...@@ -39,6 +41,7 @@ import java.util.TreeMap; ...@@ -39,6 +41,7 @@ import java.util.TreeMap;
import static com.luhu.computility.module.apihub.enums.ErrorCodeConstants.API_ENDPOINT_EXPIRED; import static com.luhu.computility.module.apihub.enums.ErrorCodeConstants.API_ENDPOINT_EXPIRED;
import static com.luhu.computility.module.apihub.enums.ErrorCodeConstants.API_ENDPOINT_NOT_AVAILABLE; import static com.luhu.computility.module.apihub.enums.ErrorCodeConstants.API_ENDPOINT_NOT_AVAILABLE;
import static com.luhu.computility.module.apihub.enums.ErrorCodeConstants.API_ENDPOINT_NOT_EXISTS; import static com.luhu.computility.module.apihub.enums.ErrorCodeConstants.API_ENDPOINT_NOT_EXISTS;
import static com.luhu.computility.module.apihub.enums.ErrorCodeConstants.HEAD_EXCEPTION;
import static com.luhu.computility.module.apihub.enums.ErrorCodeConstants.INVALID_APPID; import static com.luhu.computility.module.apihub.enums.ErrorCodeConstants.INVALID_APPID;
import static com.luhu.computility.module.apihub.enums.ErrorCodeConstants.TIMESTAMP_EXCEPTION; import static com.luhu.computility.module.apihub.enums.ErrorCodeConstants.TIMESTAMP_EXCEPTION;
...@@ -49,6 +52,7 @@ import static com.luhu.computility.module.apihub.enums.ErrorCodeConstants.TIMEST ...@@ -49,6 +52,7 @@ import static com.luhu.computility.module.apihub.enums.ErrorCodeConstants.TIMEST
*/ */
@Aspect @Aspect
@Slf4j @Slf4j
@Component
@AllArgsConstructor @AllArgsConstructor
public class ApiHubApiSignatureAspect { public class ApiHubApiSignatureAspect {
...@@ -66,19 +70,15 @@ public class ApiHubApiSignatureAspect { ...@@ -66,19 +70,15 @@ public class ApiHubApiSignatureAspect {
@Resource @Resource
private UserApiUsageApi userApiUsageApi; private UserApiUsageApi userApiUsageApi;
public ApiHubApiSignatureAspect(ApiHubApiSignatureRedisDAO signatureRedisDAO) {
this.signatureRedisDAO = signatureRedisDAO;
}
@Around("@annotation(signature)") @Around("@annotation(signature)")
public Object aroundPointCut(ProceedingJoinPoint joinPoint, ApiHubApiSignature signature) throws Throwable { public Object aroundPointCut(ProceedingJoinPoint joinPoint, ApiHubApiSignature signature) throws Throwable {
HttpServletRequest request = Objects.requireNonNull(ServletUtils.getRequest()); HttpServletRequest request = Objects.requireNonNull(ServletUtils.getRequest());
// 1.校验 Header // 1.校验 Header
/* if (!verifyHeaders(signature, request)) { if (!verifyHeaders(signature, request)) {
throw new ServiceException(HEAD_EXCEPTION); throw new ServiceException(HEAD_EXCEPTION);
}*/ }
//查询appId对应的Secret //查询appId对应的Secret
String appId = request.getHeader(signature.appId()); String appId = request.getHeader(signature.appId());
...@@ -89,11 +89,11 @@ public class ApiHubApiSignatureAspect { ...@@ -89,11 +89,11 @@ public class ApiHubApiSignatureAspect {
throw new ServiceException(INVALID_APPID); throw new ServiceException(INVALID_APPID);
} }
// 2. 签名校验 // 2. 签名校验
/*if (!verifySignature(signature, request, appCredentialDO)) { if (!verifySignature(signature, request, appCredentialRespDTO)) {
log.error("[aroundPointCut][方法 {} 参数({}) 签名失败]", joinPoint.getSignature(), joinPoint.getArgs()); log.error("[aroundPointCut][方法 {} 参数({}) 签名失败]", joinPoint.getSignature(), joinPoint.getArgs());
throw new ServiceException(BAD_REQUEST.getCode(), throw new ServiceException(GlobalErrorCodeConstants.BAD_REQUEST.getCode(),
StrUtil.blankToDefault(signature.message(), BAD_REQUEST.getMsg())); StrUtil.blankToDefault(signature.message(), GlobalErrorCodeConstants.BAD_REQUEST.getMsg()));
}*/ }
// 2. 应用-接口绑定校验 // 2. 应用-接口绑定校验
String path = request.getRequestURI(); String path = request.getRequestURI();
String method = request.getMethod(); String method = request.getMethod();
......
...@@ -2,6 +2,7 @@ package com.luhu.computility.module.apihub.signature.core.redis; ...@@ -2,6 +2,7 @@ package com.luhu.computility.module.apihub.signature.core.redis;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
...@@ -11,6 +12,7 @@ import java.util.concurrent.TimeUnit; ...@@ -11,6 +12,7 @@ import java.util.concurrent.TimeUnit;
* @author Zhougang * @author Zhougang
*/ */
@AllArgsConstructor @AllArgsConstructor
@Component
public class ApiHubApiSignatureRedisDAO { public class ApiHubApiSignatureRedisDAO {
private final StringRedisTemplate stringRedisTemplate; private final StringRedisTemplate stringRedisTemplate;
......
...@@ -3,6 +3,7 @@ package com.luhu.computility.module.external.controller.openapi; ...@@ -3,6 +3,7 @@ package com.luhu.computility.module.external.controller.openapi;
import com.luhu.computility.framework.apilog.core.annotation.ApiAccessLog; import com.luhu.computility.framework.apilog.core.annotation.ApiAccessLog;
import com.luhu.computility.framework.common.pojo.CommonResult; import com.luhu.computility.framework.common.pojo.CommonResult;
import com.luhu.computility.framework.signature.core.annotation.ApiSignature; import com.luhu.computility.framework.signature.core.annotation.ApiSignature;
import com.luhu.computility.module.apihub.signature.core.annotation.ApiHubApiSignature;
import com.luhu.computility.module.external.controller.openapi.dto.*; import com.luhu.computility.module.external.controller.openapi.dto.*;
import com.luhu.computility.module.external.controller.openapi.service.OpenApiService; import com.luhu.computility.module.external.controller.openapi.service.OpenApiService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
...@@ -41,6 +42,7 @@ public class OpenApiController { ...@@ -41,6 +42,7 @@ public class OpenApiController {
private OpenApiService openApiService; private OpenApiService openApiService;
@ApiAccessLog @ApiAccessLog
@ApiHubApiSignature
@PostMapping(value = "/digital-human-conversation") @PostMapping(value = "/digital-human-conversation")
@Operation(summary = "数字人对话", description = "和数字人朱熹进行一问一答的对话") @Operation(summary = "数字人对话", description = "和数字人朱熹进行一问一答的对话")
public CommonResult<ConversationRespDTO> digitalHumanConversation(@RequestBody ConversationReqDTO conversationReqDTO){ public CommonResult<ConversationRespDTO> digitalHumanConversation(@RequestBody ConversationReqDTO conversationReqDTO){
...@@ -49,6 +51,7 @@ public class OpenApiController { ...@@ -49,6 +51,7 @@ public class OpenApiController {
@ApiAccessLog @ApiAccessLog
@ApiHubApiSignature
@PostMapping(value = "/upload-face-image", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) @PostMapping(value = "/upload-face-image", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@Parameters({ @Parameters({
@Parameter(name = "image", description = "图片文件"), @Parameter(name = "image", description = "图片文件"),
...@@ -62,6 +65,7 @@ public class OpenApiController { ...@@ -62,6 +65,7 @@ public class OpenApiController {
@ApiAccessLog @ApiAccessLog
@ApiHubApiSignature
@GetMapping("/create-video-stream") @GetMapping("/create-video-stream")
@Operation(summary = "ai换脸-生成换脸工作流", description = "只有先上传图片才能开始换脸工作流,用户根据promptId取最后生成的视频") @Operation(summary = "ai换脸-生成换脸工作流", description = "只有先上传图片才能开始换脸工作流,用户根据promptId取最后生成的视频")
public CommonResult<CeateVideoStreamRespDTO> ceateVideoStream(@RequestBody CeateVideoStreamReqDTO ceateVideoStreamReqDTO){ public CommonResult<CeateVideoStreamRespDTO> ceateVideoStream(@RequestBody CeateVideoStreamReqDTO ceateVideoStreamReqDTO){
...@@ -70,6 +74,7 @@ public class OpenApiController { ...@@ -70,6 +74,7 @@ public class OpenApiController {
@ApiAccessLog @ApiAccessLog
@ApiHubApiSignature
@PostMapping(value = "/generate-face-swap-image", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) @PostMapping(value = "/generate-face-swap-image", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@Operation(summary = "ai换脸-图片换脸:上传图+图片生成", description = "ai换脸-图片换脸:上传图片+图片生成") @Operation(summary = "ai换脸-图片换脸:上传图+图片生成", description = "ai换脸-图片换脸:上传图片+图片生成")
public CommonResult<GenerateFaceSwapRespDTO> faceImageGenerate(@RequestPart(value = "sourceImage", required = false) MultipartFile sourceImage, public CommonResult<GenerateFaceSwapRespDTO> faceImageGenerate(@RequestPart(value = "sourceImage", required = false) MultipartFile sourceImage,
...@@ -81,6 +86,7 @@ public class OpenApiController { ...@@ -81,6 +86,7 @@ public class OpenApiController {
} }
@ApiAccessLog @ApiAccessLog
@ApiHubApiSignature
@PostMapping(value = "/image-convert", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) @PostMapping(value = "/image-convert", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@Parameters({ @Parameters({
@Parameter(name = "image", description = "图片文件"), @Parameter(name = "image", description = "图片文件"),
...@@ -95,6 +101,7 @@ public class OpenApiController { ...@@ -95,6 +101,7 @@ public class OpenApiController {
} }
@ApiAccessLog @ApiAccessLog
@ApiHubApiSignature
@PostMapping("/view-image") @PostMapping("/view-image")
@Operation(summary = "根据promptId取换脸后的图", description = "根据promptId取换脸后的图") @Operation(summary = "根据promptId取换脸后的图", description = "根据promptId取换脸后的图")
public CommonResult<ViewSourceRespDTO> viewImage(@RequestBody ViewImageReqDTO viewImageReqDTO){ public CommonResult<ViewSourceRespDTO> viewImage(@RequestBody ViewImageReqDTO viewImageReqDTO){
...@@ -102,6 +109,7 @@ public class OpenApiController { ...@@ -102,6 +109,7 @@ public class OpenApiController {
} }
@ApiAccessLog @ApiAccessLog
@ApiHubApiSignature
@GetMapping("/view-convert") @GetMapping("/view-convert")
@Operation(summary = "根据promptId取转换后的图", description = "根据promptId取图片转换后的图") @Operation(summary = "根据promptId取转换后的图", description = "根据promptId取图片转换后的图")
public CommonResult<ViewSourceRespDTO> viewConvert(@RequestParam String promptId){ public CommonResult<ViewSourceRespDTO> viewConvert(@RequestParam String promptId){
...@@ -110,6 +118,7 @@ public class OpenApiController { ...@@ -110,6 +118,7 @@ public class OpenApiController {
@ApiAccessLog @ApiAccessLog
@ApiHubApiSignature
@PostMapping(value = "/generate-face-swap-video", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) @PostMapping(value = "/generate-face-swap-video", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@Parameters({ @Parameters({
@Parameter(name = "image", description = "图片文件"), @Parameter(name = "image", description = "图片文件"),
...@@ -117,7 +126,6 @@ public class OpenApiController { ...@@ -117,7 +126,6 @@ public class OpenApiController {
@Parameter(name = "workflowCode", description = "工作流编码,不传则默认运行乔峰工作流") @Parameter(name = "workflowCode", description = "工作流编码,不传则默认运行乔峰工作流")
}) })
@Operation(summary = "ai换脸-视频换脸;ai换脸-上传图片+视频流生成", description = "ai换脸-上传图片+视频流生成") @Operation(summary = "ai换脸-视频换脸;ai换脸-上传图片+视频流生成", description = "ai换脸-上传图片+视频流生成")
@ApiSignature
public CommonResult<GenerateFaceSwapRespDTO> faceVideoGenerate(@RequestPart(value = "image", required = false) MultipartFile image, public CommonResult<GenerateFaceSwapRespDTO> faceVideoGenerate(@RequestPart(value = "image", required = false) MultipartFile image,
@RequestParam(value = "url", required = false) String url, @RequestParam(value = "url", required = false) String url,
@RequestParam(value = "workflowCode", required = false) String workflowCode) { @RequestParam(value = "workflowCode", required = false) String workflowCode) {
...@@ -126,6 +134,7 @@ public class OpenApiController { ...@@ -126,6 +134,7 @@ public class OpenApiController {
@ApiAccessLog @ApiAccessLog
@ApiHubApiSignature
@PostMapping("/view-video") @PostMapping("/view-video")
@Operation(summary = "根据promptId取最后生成的视频", description = "根据promptId取最后生成的视频") @Operation(summary = "根据promptId取最后生成的视频", description = "根据promptId取最后生成的视频")
public CommonResult<ViewSourceRespDTO> viewVideo(@RequestBody ViewVideoReqDTO viewVideoReqDTO){ public CommonResult<ViewSourceRespDTO> viewVideo(@RequestBody ViewVideoReqDTO viewVideoReqDTO){
...@@ -133,6 +142,7 @@ public class OpenApiController { ...@@ -133,6 +142,7 @@ public class OpenApiController {
} }
@ApiAccessLog @ApiAccessLog
@ApiHubApiSignature
@PostMapping(value = "/match-image") @PostMapping(value = "/match-image")
@Parameters({ @Parameters({
@Parameter(name = "image", description = "图片文件"), @Parameter(name = "image", description = "图片文件"),
...@@ -153,6 +163,7 @@ public class OpenApiController { ...@@ -153,6 +163,7 @@ public class OpenApiController {
@ApiAccessLog @ApiAccessLog
@ApiHubApiSignature
@PostMapping("/AIQA-chat") @PostMapping("/AIQA-chat")
@Operation(summary = "AI问答", description = "AI助手,关于行程和景区的疑问") @Operation(summary = "AI问答", description = "AI助手,关于行程和景区的疑问")
//@ApiSignature //@ApiSignature
...@@ -164,6 +175,7 @@ public class OpenApiController { ...@@ -164,6 +175,7 @@ public class OpenApiController {
@ApiAccessLog @ApiAccessLog
@ApiHubApiSignature
@PostMapping(value = "/AIQA-stream-chat", produces = MediaType.TEXT_EVENT_STREAM_VALUE) @PostMapping(value = "/AIQA-stream-chat", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
@Operation(summary = "AI问答流式返回", description = "流式返回AI助手,关于行程和景区的疑问") @Operation(summary = "AI问答流式返回", description = "流式返回AI助手,关于行程和景区的疑问")
public SseEmitter AIQAStreamChat(@RequestBody AIQAReqDTO aiqaReqDTO) { public SseEmitter AIQAStreamChat(@RequestBody AIQAReqDTO aiqaReqDTO) {
...@@ -172,6 +184,7 @@ public class OpenApiController { ...@@ -172,6 +184,7 @@ public class OpenApiController {
@ApiAccessLog @ApiAccessLog
@ApiHubApiSignature
@PostMapping(value = "/aliyun-stream-chat", produces = MediaType.TEXT_EVENT_STREAM_VALUE) @PostMapping(value = "/aliyun-stream-chat", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
@Operation(summary = "AI问答流式返回", description = "流式返回AI助手,关于行程和景区的疑问") @Operation(summary = "AI问答流式返回", description = "流式返回AI助手,关于行程和景区的疑问")
public SseEmitter aliyunStreamChat(@RequestBody AIQAReqDTO aiqaReqDTO) { public SseEmitter aliyunStreamChat(@RequestBody AIQAReqDTO aiqaReqDTO) {
...@@ -179,6 +192,7 @@ public class OpenApiController { ...@@ -179,6 +192,7 @@ public class OpenApiController {
} }
@ApiAccessLog @ApiAccessLog
@ApiHubApiSignature
@PostMapping(value="/glm-stream-chat", produces=MediaType.TEXT_EVENT_STREAM_VALUE) @PostMapping(value="/glm-stream-chat", produces=MediaType.TEXT_EVENT_STREAM_VALUE)
@Operation(summary = "智谱GLM流式-自定义messages", description = "调用方自定义messages数组") @Operation(summary = "智谱GLM流式-自定义messages", description = "调用方自定义messages数组")
public SseEmitter glmStreamChat(@RequestBody ZhipuChatReqDTO zhipuChatReqDTO) { public SseEmitter glmStreamChat(@RequestBody ZhipuChatReqDTO zhipuChatReqDTO) {
...@@ -186,6 +200,7 @@ public class OpenApiController { ...@@ -186,6 +200,7 @@ public class OpenApiController {
} }
@ApiAccessLog @ApiAccessLog
@ApiHubApiSignature
@PostMapping(value="/glm-multi-stream-chat", produces=MediaType.TEXT_EVENT_STREAM_VALUE) @PostMapping(value="/glm-multi-stream-chat", produces=MediaType.TEXT_EVENT_STREAM_VALUE)
@Operation(summary = "智谱GLM多轮流式", description = "多轮对话,带历史记录存储") @Operation(summary = "智谱GLM多轮流式", description = "多轮对话,带历史记录存储")
public SseEmitter glmMultiStreamChat(@RequestBody ZhipuConversationReqDTO zhipuConversationReqDTO) { public SseEmitter glmMultiStreamChat(@RequestBody ZhipuConversationReqDTO zhipuConversationReqDTO) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment