From b0ff8d0e892a12894c9bca1692a87c84e66b0713 Mon Sep 17 00:00:00 2001 From: zzy <2450266535@qq.com> Date: Mon, 29 Sep 2025 01:44:45 +0800 Subject: [PATCH] =?UTF-8?q?feat(bookmarks):=20=E9=9B=86=E6=88=90VFS?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=B9=B6=E4=BC=98=E5=8C=96=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E6=B3=A8=E5=86=8C=E4=B8=8E=E5=88=A0=E9=99=A4=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增VFSService用于与VFS系统交互,实现用户创建和删除功能。 在用户注册时调用VFS创建用户并获取token,在删除用户时同步删除VFS中的用户。 移除了原有使用UUID生成token的逻辑,改为由VFS返回token。 添加RestTemplate Bean配置以支持HTTP请求。 注释掉pom.xml中未使用的vfs-client代码生成插件配置。 --- pom.xml | 22 ------ .../com/zzyxyz/api/bookmarks/CorsConfig.java | 7 ++ .../bookmarks/user_np/UserNPController.java | 19 +++-- .../api/bookmarks/user_np/VFSService.java | 76 +++++++++++++++++++ 4 files changed, 97 insertions(+), 27 deletions(-) create mode 100644 src/main/java/com/zzyxyz/api/bookmarks/user_np/VFSService.java diff --git a/pom.xml b/pom.xml index 51f74d8..8eb1f29 100644 --- a/pom.xml +++ b/pom.xml @@ -116,28 +116,6 @@ - diff --git a/src/main/java/com/zzyxyz/api/bookmarks/CorsConfig.java b/src/main/java/com/zzyxyz/api/bookmarks/CorsConfig.java index 43e226f..1b69593 100644 --- a/src/main/java/com/zzyxyz/api/bookmarks/CorsConfig.java +++ b/src/main/java/com/zzyxyz/api/bookmarks/CorsConfig.java @@ -2,6 +2,7 @@ package com.zzyxyz.api.bookmarks; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.web.client.RestTemplate; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.filter.CorsFilter; @@ -40,4 +41,10 @@ public class CorsConfig { return new CorsFilter(source); } + + // 添加RestTemplate Bean配置 + @Bean + public RestTemplate restTemplate() { + return new RestTemplate(); + } } \ No newline at end of file diff --git a/src/main/java/com/zzyxyz/api/bookmarks/user_np/UserNPController.java b/src/main/java/com/zzyxyz/api/bookmarks/user_np/UserNPController.java index 57343ba..5871ca7 100644 --- a/src/main/java/com/zzyxyz/api/bookmarks/user_np/UserNPController.java +++ b/src/main/java/com/zzyxyz/api/bookmarks/user_np/UserNPController.java @@ -10,7 +10,6 @@ import org.springframework.web.bind.annotation.CrossOrigin; import java.sql.SQLException; import java.time.OffsetDateTime; -import java.util.UUID; @Controller @CrossOrigin(origins = "*") @@ -19,6 +18,9 @@ public class UserNPController implements DefaultApi, AuthApi { @Autowired private UserNPDAO userDAO; + @Autowired + private VFSService vfsService; + // 初始化数据库表 public UserNPController() { try { @@ -38,6 +40,10 @@ public class UserNPController implements DefaultApi, AuthApi { return ResponseEntity.ok().build(); } + boolean ret = vfsService.deleteUser(user.getUsername(), user.getToken()); + if (!ret) { + return ResponseEntity.status(500).build(); + } userDAO.delete(user.getId()); return ResponseEntity.ok().build(); } catch (SQLException e) { @@ -84,14 +90,11 @@ public class UserNPController implements DefaultApi, AuthApi { return ResponseEntity.status(401).build(); // 认证失败 } - // 生成token - String token = UUID.randomUUID().toString(); - user.setToken(token); user.setUpdatedAt(OffsetDateTime.now()); userDAO.update(user); LoginResponse response = new LoginResponse(); - response.setToken(token); + response.setToken(user.getToken()); response.setUserId(user.getId()); return ResponseEntity.ok(response); @@ -114,6 +117,12 @@ public class UserNPController implements DefaultApi, AuthApi { UserNP user = new UserNP(username, "", registerRequest.getEmail()); user.hashPassword(registerRequest.getPassword()); + String ret = vfsService.createUser(username, "random_token"); + if (ret == null) { + return ResponseEntity.status(500).build(); + } + user.setToken(ret); + // 保存到数据库 UserNP savedUser = userDAO.insert(user); diff --git a/src/main/java/com/zzyxyz/api/bookmarks/user_np/VFSService.java b/src/main/java/com/zzyxyz/api/bookmarks/user_np/VFSService.java new file mode 100644 index 0000000..9e2ae45 --- /dev/null +++ b/src/main/java/com/zzyxyz/api/bookmarks/user_np/VFSService.java @@ -0,0 +1,76 @@ +package com.zzyxyz.api.bookmarks.user_np; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; + +@Service +public class VFSService { + private static final Logger logger = LoggerFactory.getLogger(VFSService.class); + + @Autowired + private RestTemplate restTemplate; + + private final String vfsBaseUrl = "http://localhost:8080/api"; // 根据实际情况调整 + + /** + * 创建用户 + */ + public String createUser(String username, String apiKey) { + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + headers.set("X-VFS-Token", apiKey); // 根据API要求设置认证头 + + HttpEntity entity = new HttpEntity<>("{}", headers); + + try { + ResponseEntity response = restTemplate.postForEntity( + vfsBaseUrl + "/vfs/v1/users/" + username, + entity, + String.class + ); + + if (response.getStatusCode().is2xxSuccessful()) { + return response.getHeaders().getFirst("X-VFS-Token"); + } + } catch (Exception e) { + e.printStackTrace(); + } + + return null; + } + + /** + * 删除用户 + */ + public boolean deleteUser(String username, String token) { + HttpHeaders headers = new HttpHeaders(); + headers.set("X-VFS-Token", token); + + HttpEntity entity = new HttpEntity<>(headers); + + logger.info("deletUserToken: " + token); + try { + ResponseEntity response = restTemplate.exchange( + vfsBaseUrl + "/vfs/v1/users/" + username, + HttpMethod.DELETE, + entity, + Void.class + ); + if (response.getStatusCode().is2xxSuccessful()) { + return true; + } + return false; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } +}