From 5e7471e6fa3947419e1237e1eb6f69f3eda35cb3 Mon Sep 17 00:00:00 2001 From: maojian <550076202@qq.com> Date: Tue, 3 Feb 2026 18:29:07 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=A8=E6=88=B7=E4=BF=A1=E6=81=AF=E5=85=B3?= =?UTF-8?q?=E8=81=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- opai-api/pom.xml | 6 +++- .../src/main/java/com/bw/opai/app/dto/Task.java | 2 +- .../bw/opai/app/service/impl/AppServiceImpl.java | 31 ++++++++++++++---- .../src/main/java/com/bw/opai/utils/Constants.java | 7 ++++ .../src/main/java/com/bw/opai/utils/JwtUtil.java | 37 ++++++++++++++++++++++ 5 files changed, 75 insertions(+), 8 deletions(-) create mode 100644 opai-api/src/main/java/com/bw/opai/utils/JwtUtil.java diff --git a/opai-api/pom.xml b/opai-api/pom.xml index 8b3a524..09dc79d 100644 --- a/opai-api/pom.xml +++ b/opai-api/pom.xml @@ -85,7 +85,11 @@ mybatis-plus-boot-starter 3.4.3.4 - + + io.jsonwebtoken + jjwt + 0.9.1 + diff --git a/opai-api/src/main/java/com/bw/opai/app/dto/Task.java b/opai-api/src/main/java/com/bw/opai/app/dto/Task.java index 9a9721d..b7ea983 100644 --- a/opai-api/src/main/java/com/bw/opai/app/dto/Task.java +++ b/opai-api/src/main/java/com/bw/opai/app/dto/Task.java @@ -57,7 +57,7 @@ public class Task { /** * 用户标识 */ - private String userId; + private Integer userId; /** * 完成时间 diff --git a/opai-api/src/main/java/com/bw/opai/app/service/impl/AppServiceImpl.java b/opai-api/src/main/java/com/bw/opai/app/service/impl/AppServiceImpl.java index e6d9bb9..6599bd2 100644 --- a/opai-api/src/main/java/com/bw/opai/app/service/impl/AppServiceImpl.java +++ b/opai-api/src/main/java/com/bw/opai/app/service/impl/AppServiceImpl.java @@ -7,6 +7,8 @@ import java.util.List; import java.util.Map; import java.util.UUID; +import javax.servlet.http.HttpServletRequest; + import org.apache.http.HttpResponse; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; @@ -18,6 +20,7 @@ import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.stereotype.Service; @@ -36,7 +39,9 @@ import com.bw.opai.app.service.AppService; import com.bw.opai.common.Res; import com.bw.opai.utils.Constants; import com.bw.opai.utils.DownLoadUtil; +import com.bw.opai.utils.JwtUtil; +import io.jsonwebtoken.Claims; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -63,6 +68,14 @@ public class AppServiceImpl implements AppService { @Value("${elasticsearch.index-name}") private String indexName; + // 从 Nacos 加载密钥,并设置一个默认值防止配置缺失导致启动失败 + @Value("${jwt.secret:my_secret_key_default_2026}") + private String secret; + + @Autowired + private HttpServletRequest request; + + @Override public Res getApps(Integer page, Integer size) { // 参数校验 @@ -133,6 +146,11 @@ public class AppServiceImpl implements AppService { log.error("启动应用请求异常, param={},download error:{}", param, downloadRes); return Res.fail("启动应用请求异常"); } + //获取Authorization + String authorization = request.getHeader(Constants.AUTHORIZATION); + //获取用户id + Claims claims = JwtUtil.getClaimsFromToken(authorization, secret); + int userId = (int) claims.get(Constants.USERID); //任务录入表中 Task task = new Task(); task.setId(taskId); @@ -140,7 +158,7 @@ public class AppServiceImpl implements AppService { task.setAppId(appId); task.setDel(0); task.setStatus(0); - task.setUserId("1"); + task.setUserId(userId); taskMapper.insert(task); // ---------- 返回 ---------- return Res.ok(task); @@ -163,10 +181,11 @@ public class AppServiceImpl implements AppService { } // 从登录上下文获取 userId(你项目里已有) 先写死 - String userId = "1"; - if (userId == null || userId.trim().equals("")) { - return Res.fail("未获取到用户信息"); - } + String authorization = request.getHeader(Constants.AUTHORIZATION); + log.info("authorization:{}",authorization); + //获取用户id + Claims claims = JwtUtil.getClaimsFromToken(authorization, secret); + int userId = (int) claims.get(Constants.USERID); try { Page pageParam = new Page<>(page, size); @@ -174,7 +193,7 @@ public class AppServiceImpl implements AppService { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(Task::getDel, 0) .eq(Task::getAppId,appId) - .eq(userId != null, Task::getUserId, userId) + .eq(Task::getUserId, userId) .orderByDesc(Task::getCreateTime); Page result = taskMapper.selectPage(pageParam, wrapper); diff --git a/opai-api/src/main/java/com/bw/opai/utils/Constants.java b/opai-api/src/main/java/com/bw/opai/utils/Constants.java index 958bd38..2148b1a 100644 --- a/opai-api/src/main/java/com/bw/opai/utils/Constants.java +++ b/opai-api/src/main/java/com/bw/opai/utils/Constants.java @@ -21,4 +21,11 @@ public class Constants { * 任务id常量 */ public static final String TASKID = "taskId"; + + /** + *用户id + */ + public static final String USERID = "userId"; + + public static final String AUTHORIZATION = "Authorization"; } diff --git a/opai-api/src/main/java/com/bw/opai/utils/JwtUtil.java b/opai-api/src/main/java/com/bw/opai/utils/JwtUtil.java new file mode 100644 index 0000000..6d2ab67 --- /dev/null +++ b/opai-api/src/main/java/com/bw/opai/utils/JwtUtil.java @@ -0,0 +1,37 @@ +package com.bw.opai.utils; + +import com.alibaba.fastjson.JSONObject; + +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.Jwts; + +/** + * 各个系统之间互认的“通行证”工具类 + * 密钥与配置均通过 Nacos 动态管理 + */ +public class JwtUtil { + + + /** + * 从 Token 中获取载荷 + */ + public static Claims getClaimsFromToken(String token,String secret) { + try { + return Jwts.parser() + .setSigningKey(secret) + .parseClaimsJws(token) + .getBody(); + } catch (Exception e) { + // 如果签名不对、Token 过期,会返回 null + return null; + } + } + + + public static void main(String[] args) { + String token = "eyJhbGciOiJIUzUxMiJ9.eyJhcHBJZCI6MiwiZXhwIjoxNzcwMTIwOTU5LCJ1c2VySWQiOjQsImlhdCI6MTc3MDExMzc1OSwidXNlcm5hbWUiOiJvcGFpQWRtaW4ifQ.wg9Yr30bRZxoTepmATx6B5xK2l7GCdedjHh2tU3w49-99z9_kHwPbTFC2thYd-Py5oQDwvsxBDscs0qoOKXHrg"; + Claims c = JwtUtil.getClaimsFromToken(token, ""); + System.out.println(JSONObject.toJSONString(c)); + + } +} \ No newline at end of file