Commit efe7d785 by renyizhao

api应用问题

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