From cb582fd2d3bbee8c6cd4d4890b312f6d961b34ad Mon Sep 17 00:00:00 2001 From: vertoryao Date: Thu, 10 Jul 2025 10:55:34 +0800 Subject: [PATCH] =?UTF-8?q?refactor(dify):=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E7=BB=93=E6=9E=84=E5=92=8C=E5=AE=89=E5=85=A8=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 为 AppEntity 类添加全参数构造器和无参构造器 - 移除 DataScopeAspect 类中的未使用代码 - 在 JpaUserDetailsServiceImpl 中增加用户不存在时的异常处理 - 更新 pom.xml,调整依赖项 - 删除未使用的 RedisUtils 类 - 更新 V1ChatController 和 V1WorkflowController 中的权限控制注解 --- pom.xml | 9 ++- .../mybatisplus/DataScopeAspect.java | 1 - .../edu/dify/framework/redis/RedisUtils.java | 72 ------------------- .../security/JpaUserDetailsServiceImpl.java | 3 + .../dify/controller/V1ChatController.java | 6 +- .../dify/controller/V1WorkflowController.java | 10 ++- .../dify/modules/dify/entity/AppEntity.java | 2 + 7 files changed, 19 insertions(+), 84 deletions(-) delete mode 100644 src/main/java/com/zsc/edu/dify/framework/redis/RedisUtils.java diff --git a/pom.xml b/pom.xml index 77bbcc9..bd6d8a7 100644 --- a/pom.xml +++ b/pom.xml @@ -44,11 +44,6 @@ dify-spring-boot-starter 0.11.0 - - - org.springframework.boot - spring-boot-starter-aop - org.springframework.boot spring-boot-starter-data-redis @@ -61,6 +56,10 @@ org.springframework.boot spring-boot-starter-integration + + org.springframework.boot + spring-boot-starter-aop + org.springframework.boot spring-boot-starter-mail diff --git a/src/main/java/com/zsc/edu/dify/framework/mybatisplus/DataScopeAspect.java b/src/main/java/com/zsc/edu/dify/framework/mybatisplus/DataScopeAspect.java index b6d0737..b351b82 100644 --- a/src/main/java/com/zsc/edu/dify/framework/mybatisplus/DataScopeAspect.java +++ b/src/main/java/com/zsc/edu/dify/framework/mybatisplus/DataScopeAspect.java @@ -1,5 +1,4 @@ package com.zsc.edu.dify.framework.mybatisplus; - import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; diff --git a/src/main/java/com/zsc/edu/dify/framework/redis/RedisUtils.java b/src/main/java/com/zsc/edu/dify/framework/redis/RedisUtils.java deleted file mode 100644 index 604edf5..0000000 --- a/src/main/java/com/zsc/edu/dify/framework/redis/RedisUtils.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.zsc.edu.dify.framework.redis; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.redis.core.StringRedisTemplate; -import org.springframework.data.redis.core.ValueOperations; -import org.springframework.stereotype.Component; - -import java.util.concurrent.TimeUnit; - -/** - * @author zhuang - */ -@Component -public class RedisUtils { - - @Autowired - private StringRedisTemplate stringRedisTemplate; - - /** - * 设置键值对 - * - * @param key 键 - * @param value 值 - */ - public void set(String key, String value) { - ValueOperations ops = stringRedisTemplate.opsForValue(); - ops.set(key, value); - } - - /** - * 设置键值对并设置过期时间 - * - * @param key 键 - * @param value 值 - * @param timeout 过期时间 - * @param unit 时间单位 - */ - public void set(String key, String value, long timeout, TimeUnit unit) { - ValueOperations ops = stringRedisTemplate.opsForValue(); - ops.set(key, value, timeout, unit); - } - - /** - * 获取键值对 - * - * @param key 键 - * @return 值 - */ - public String get(String key) { - ValueOperations ops = stringRedisTemplate.opsForValue(); - return ops.get(key); - } - - /** - * 检查键是否存在 - * - * @param key 键 - * @return 是否存在 - */ - public boolean hasKey(String key) { - return Boolean.TRUE.equals(stringRedisTemplate.hasKey(key)); - } - - /** - * 删除键 - * - * @param key 键 - */ - public void delete(String key) { - stringRedisTemplate.delete(key); - } -} diff --git a/src/main/java/com/zsc/edu/dify/framework/security/JpaUserDetailsServiceImpl.java b/src/main/java/com/zsc/edu/dify/framework/security/JpaUserDetailsServiceImpl.java index 59bbbf9..e6dda57 100644 --- a/src/main/java/com/zsc/edu/dify/framework/security/JpaUserDetailsServiceImpl.java +++ b/src/main/java/com/zsc/edu/dify/framework/security/JpaUserDetailsServiceImpl.java @@ -38,6 +38,9 @@ public class JpaUserDetailsServiceImpl implements UserDetailsService { @Transactional(rollbackFor = Exception.class) public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { User user = userRepo.selectByUsername(username); + if (user == null) { + throw new UsernameNotFoundException("用户不存在"); + } if (!user.getEnableState()) { throw new StateException("用户 '" + username + "' 已被禁用!请联系管理员"); } diff --git a/src/main/java/com/zsc/edu/dify/modules/dify/controller/V1ChatController.java b/src/main/java/com/zsc/edu/dify/modules/dify/controller/V1ChatController.java index c2f5388..e57baf7 100644 --- a/src/main/java/com/zsc/edu/dify/modules/dify/controller/V1ChatController.java +++ b/src/main/java/com/zsc/edu/dify/modules/dify/controller/V1ChatController.java @@ -46,7 +46,7 @@ public class V1ChatController { * apikey 建议在数据库进行存储,前端调用时传智能体 id,从数据库查询 */ @PostMapping("/completions/{appId}") - @PreAuthorize("hasAuthority('difyChat:query')") + @PreAuthorize("hasAuthority('dify:chat:send')") @OperationLogAnnotation(content = "'dify对话'", operationType = "发送") public ChatMessageSendResponse sendChatMessage( @RequestBody ChatMessageSendRequest sendRequest, @@ -56,8 +56,6 @@ public class V1ChatController { sendRequest.setUserId(SecurityUtil.getUserInfo().id.toString()); return ExceptionUtil.difyException(()->difyChat.send(sendRequest)); } - - /** * 发送消息(流式) * @@ -66,7 +64,7 @@ public class V1ChatController { * apikey 建议在数据库进行存储,前端调用时传智能体 id,从数据库查询 */ @PostMapping(value = "/completions/stream/{appid}", produces = MediaType.TEXT_EVENT_STREAM_VALUE) -// @PreAuthorize("hasAuthority('difyChat:query')") + @PreAuthorize("hasAuthority('dify:chat:send')") public Flux sendChatMessageStream( @RequestBody ChatMessageSendRequest sendRequest, @PathVariable String appid diff --git a/src/main/java/com/zsc/edu/dify/modules/dify/controller/V1WorkflowController.java b/src/main/java/com/zsc/edu/dify/modules/dify/controller/V1WorkflowController.java index 47682d9..4aabe7e 100644 --- a/src/main/java/com/zsc/edu/dify/modules/dify/controller/V1WorkflowController.java +++ b/src/main/java/com/zsc/edu/dify/modules/dify/controller/V1WorkflowController.java @@ -15,6 +15,7 @@ import io.github.guoshiqiufeng.dify.workflow.dto.request.WorkflowLogsRequest; import io.github.guoshiqiufeng.dify.workflow.dto.request.WorkflowRunRequest; import io.github.guoshiqiufeng.dify.workflow.dto.response.*; import jakarta.annotation.Resource; +import org.springframework.http.MediaType; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import reactor.core.publisher.Flux; @@ -53,8 +54,12 @@ public class V1WorkflowController { * @param request * @return */ - @PostMapping("/run/stream") - public Flux runWorkflowStream(@RequestBody WorkflowRunRequest request) { + @PostMapping(value = "/run/stream/{appId}", produces= MediaType.TEXT_EVENT_STREAM_VALUE) + @OperationLogAnnotation(content = "'dify工作流'", operationType = "运行") + public Flux runWorkflowStream(@RequestBody WorkflowRunRequest request, @PathVariable String appId) { + String apiKey =appEntityService.getApikey(appId); + request.setUserId(SecurityUtil.getUserInfo().id.toString()); + request.setApiKey(apiKey); return difyWorkflow.runWorkflowStream(request); } @@ -65,6 +70,7 @@ public class V1WorkflowController { * @return */ @PatchMapping("/stop/{appId}") + @OperationLogAnnotation(content = "'dify工作流'", operationType = "运行") public WorkflowStopResponse stopWorkflowStream(String taskId, @PathVariable String appId) { String apiKey =appEntityService.getApikey(appId); String userId = SecurityUtil.getUserInfo().id.toString(); diff --git a/src/main/java/com/zsc/edu/dify/modules/dify/entity/AppEntity.java b/src/main/java/com/zsc/edu/dify/modules/dify/entity/AppEntity.java index 1229426..481dec1 100644 --- a/src/main/java/com/zsc/edu/dify/modules/dify/entity/AppEntity.java +++ b/src/main/java/com/zsc/edu/dify/modules/dify/entity/AppEntity.java @@ -19,6 +19,8 @@ import java.util.Map; @EqualsAndHashCode(callSuper = true) @Getter @Setter +@AllArgsConstructor +@NoArgsConstructor @TableName("apps_entity") public class AppEntity extends AppsResponseVO {