From 302a3bde1d46bb8b6bafeb662899d12005f62242 Mon Sep 17 00:00:00 2001 From: liulxb <1964023718@qq.com> Date: Tue, 16 Jul 2024 14:54:48 +0800 Subject: [PATCH 01/15] =?UTF-8?q?#=E7=94=A8=E6=88=B7=E6=9D=83=E9=99=90?= =?UTF-8?q?=E8=AE=A4=E8=AF=81=5F20240716?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 第一版代码 --- .../query/ApplicationVersionQueryAdapter.java | 5 +- .../adapter/query/UserAdapter.java | 15 --- .../common/account/UserPermission.java | 105 ++++++++++++++++ .../common/annotation/PreUserPermission.java | 14 +++ .../common/aop/PreUserPermissionAspect.java | 53 ++++++++ src/main/resources/application.yaml | 115 ++++++++++++++++++ 6 files changed, 290 insertions(+), 17 deletions(-) create mode 100644 src/main/java/com/easysoftware/common/account/UserPermission.java create mode 100644 src/main/java/com/easysoftware/common/annotation/PreUserPermission.java create mode 100644 src/main/java/com/easysoftware/common/aop/PreUserPermissionAspect.java create mode 100644 src/main/resources/application.yaml diff --git a/src/main/java/com/easysoftware/adapter/query/ApplicationVersionQueryAdapter.java b/src/main/java/com/easysoftware/adapter/query/ApplicationVersionQueryAdapter.java index b378670..76e7b77 100644 --- a/src/main/java/com/easysoftware/adapter/query/ApplicationVersionQueryAdapter.java +++ b/src/main/java/com/easysoftware/adapter/query/ApplicationVersionQueryAdapter.java @@ -11,6 +11,7 @@ package com.easysoftware.adapter.query; +import com.easysoftware.common.annotation.PreUserPermission; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; @@ -42,9 +43,9 @@ public class ApplicationVersionQueryAdapter { */ @GetMapping() @RequestLimitRedis() + @PreUserPermission("easysoftwareread") public ResponseEntity searchAppVersion(@Valid final ApplicationVersionSearchCondition condition) { // 检查会话权限 - StpUtil.checkPermission("easysoftwareread"); return appVersionService.searchAppVersion(condition); } @@ -57,9 +58,9 @@ public class ApplicationVersionQueryAdapter { */ @GetMapping("/column") @RequestLimitRedis() + @PreUserPermission("easysoftwareread") public ResponseEntity searchAppVerColumn(@Valid final ApplicationColumnSearchCondition condition) { // 检查会话权限 - StpUtil.checkPermission("easysoftwareread"); return appVersionService.searchAppVerColumn(condition); } } diff --git a/src/main/java/com/easysoftware/adapter/query/UserAdapter.java b/src/main/java/com/easysoftware/adapter/query/UserAdapter.java index 7f9c320..b7e5acf 100644 --- a/src/main/java/com/easysoftware/adapter/query/UserAdapter.java +++ b/src/main/java/com/easysoftware/adapter/query/UserAdapter.java @@ -31,12 +31,6 @@ public class UserAdapter { @Value("${cookie.token.name}") private String cookieTokenName; - /** - * Autowired redisGateway. - */ - @Autowired - private RedisGateway redisGateway; - /** * Verify login status from oneid, and maintain session. * @@ -58,11 +52,6 @@ public class UserAdapter { throw new NotLoginException("oneid unloggin, missing token", "", ""); } - // 用户已经真正登录oneid 以usertoken登录 并维持会话 - // 设置用户会话token - StpUtil.login(userToken); - redisGateway.setWithExpire(userToken, userToken, 300, TimeUnit.SECONDS); - return ResultUtil.success(HttpStatus.OK); } @@ -77,10 +66,6 @@ public class UserAdapter { // 用户退出 删除token信息 String userToken = httpServletRequest.getHeader(HttpConstant.TOKEN); - if (redisGateway.hasKey(userToken)) { - redisGateway.detele(userToken); - } - StpUtil.logout(); return ResultUtil.success(HttpStatus.OK); diff --git a/src/main/java/com/easysoftware/common/account/UserPermission.java b/src/main/java/com/easysoftware/common/account/UserPermission.java new file mode 100644 index 0000000..fc21145 --- /dev/null +++ b/src/main/java/com/easysoftware/common/account/UserPermission.java @@ -0,0 +1,105 @@ +package com.easysoftware.common.account; + +import com.easysoftware.common.constant.HttpConstant; +import com.easysoftware.common.exception.HttpRequestException; +import com.easysoftware.common.utils.HttpClientUtil; +import com.easysoftware.common.utils.ObjectMapperUtil; +import com.fasterxml.jackson.databind.JsonNode; +import jakarta.servlet.http.HttpServletRequest; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import java.util.HashSet; +import java.util.Objects; + +@Component +public class UserPermission { + + /** + * Value injected for the manage token API. + */ + @Value("${oneid.manage.tokenApi}") + private String manageTokenApi; + + /** + * Value injected for the manage API body. + */ + @Value("${oneid.manage.apiBody}") + private String manageApiBody; + + /** + * Value injected for the permission API. + */ + @Value("${oneid.permissionApi}") + private String permissionApi; + + /** + * Get user permission by user token and manage token + * @return + */ + public HashSet getPermissionList() { + // 使用获取userToken + String userToken = getUserToken(); + + // 获取oneid manage token + String manageToken = getManageToken(); + + // 使用userToke、manageToken查询用户权限 + String response = HttpClientUtil.getHttpClient(permissionApi, manageToken, userToken, userToken); + JsonNode resJson = ObjectMapperUtil.toJsonNode(response); + + String resStaus = resJson.get("status").asText(); + // 查询权限失败 + if (!resStaus.equals("200")) { + throw new HttpRequestException("query oneid failed"); + } + + // 空权限账户 + if (!resJson.has("data")) { + return new HashSet(); + } + + // 设置权限 + //TODO 这个地方用Set可以吗?(方便外面的权限匹配) + JsonNode permissions = resJson.get("data").get("permissions"); + HashSet permissionSet = new HashSet<>(); + for (JsonNode per : permissions) { + permissionSet.add(per.asText()); + } + + return permissionSet; + } + + /** + * Get manage token + * @return manage token + */ + private String getManageToken() { + String response = HttpClientUtil.postHttpClient(manageTokenApi, manageApiBody); + JsonNode resJson = ObjectMapperUtil.toJsonNode(response); + return resJson.get("token").asText(); + } + + /** + * Get user token + * @return user token + */ + private String getUserToken() { + ServletRequestAttributes servletRequestAttributes = + (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + if (Objects.isNull(servletRequestAttributes)) { + throw new HttpRequestException("unauthorized, missing token"); + } + HttpServletRequest httpServletRequest = servletRequestAttributes.getRequest(); + + String userToken = httpServletRequest.getHeader(HttpConstant.TOKEN); + if (null == userToken) { + throw new HttpRequestException("unauthorized, missing token"); + } + + return userToken; + } + +} diff --git a/src/main/java/com/easysoftware/common/annotation/PreUserPermission.java b/src/main/java/com/easysoftware/common/annotation/PreUserPermission.java new file mode 100644 index 0000000..1178d86 --- /dev/null +++ b/src/main/java/com/easysoftware/common/annotation/PreUserPermission.java @@ -0,0 +1,14 @@ +package com.easysoftware.common.annotation; + +import java.lang.annotation.*; + +/** + * This annotation is used for authentication + */ +@Target({ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Inherited +@Documented +public @interface PreUserPermission { + String[] value() default {} ; +} diff --git a/src/main/java/com/easysoftware/common/aop/PreUserPermissionAspect.java b/src/main/java/com/easysoftware/common/aop/PreUserPermissionAspect.java new file mode 100644 index 0000000..aca1bb5 --- /dev/null +++ b/src/main/java/com/easysoftware/common/aop/PreUserPermissionAspect.java @@ -0,0 +1,53 @@ +package com.easysoftware.common.aop; + +import com.easysoftware.common.account.UserPermission; +import com.easysoftware.common.annotation.PreUserPermission; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.lang.reflect.Method; +import java.util.HashSet; +import java.util.Objects; + +@Aspect +@Component +public class PreUserPermissionAspect { + + @Autowired + UserPermission userPermission; + + /** + * Defines the pointcut for methods in specific packages. + */ + @Pointcut("@annotation(com.easysoftware.common.annotation.PreUserPermission)") + public void pointcut() {} + + @Before("pointcut()") + public void before(final JoinPoint joinPoint) throws Throwable { + /* 获取PreUserPermission注解参数 */ + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); + Method method = methodSignature.getMethod(); + PreUserPermission preUserPermission = method.getAnnotation(PreUserPermission.class); + String[] paramValues = preUserPermission.value(); + + /* 未指定参数 */ + if (Objects.isNull(paramValues) || 0 == paramValues.length) { + return ; + } + + /* 获取客户权限,检查 */ + HashSet permissionSet = userPermission.getPermissionList(); + for (String item:paramValues) { + if (permissionSet.contains(item)) { + return ; + } + } + + throw new Exception("您无权限访问"); + } +} diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml new file mode 100644 index 0000000..763d3e8 --- /dev/null +++ b/src/main/resources/application.yaml @@ -0,0 +1,115 @@ +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://1.94.147.171:3306/easysoftware_test?characterEncoding=utf8&useSSL=false&autoReconnect=true&serverTimezone=UTC + username: gouzhonglin + password: XWj*6XTqxSDk!Gbr + jackson: + dataformat: yyyy-MM-dd HH:mm:ss + time-zone: GMT+8 + data: + redis: + host: 192.168.1.236 + port: 6379 + password: Apf!88QvjRQLpa9kCwUY + connect-timeout: 3000 + timeout: 2000 + poolmin-idel: 50 + poolmax-idel: 200 + poolmax: 200 + +redis-global: + expiration: 12 + caPath: C:\ca.crt + +dos-global: + rejectPeriod: 10 + rejectCount: 5 + +mybatis-plus: + configuration: + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl +server: + error: + path: /error + whitelabel: + enabled: false + port: 8080 + tomcat: + max-threads: 200 + connection-timeout: 20000 +bootstrap: + servers: 123.60.153.128:9094 + +producer: + acks: 1 + retries: 3 + retryBackoffMs: 1000 + batchSize: 16384 + lingerMs: 0 + topic: software_test + +consumer: + groupId: software_test + enableAutoCommit: false + autoCommitIntervalMs: 1000 + sessionTimeoutMs: 30000 + topic: + name: software_test + offset: 0:0 + +apppkg: + icon: + path: aa + +api: + repoMaintainer: test + repoInfo: test + repoDownload: test + repoSig: test + +obs: + endpoint: test + bucket: test + ak: test + sk: test + +logging: + file: + path: D:\easesoftware\localtest\log + level: + com: + easysoftware: + adapter: + query: debug + + +cookie: + token: + name: _Y_G_ + domains: easysoftware.test.osinfra.cn + +oneid: + manage: + tokenApi: https://omapi.osinfra.cn/oneid/manager/token + app_id: 623c3c2f1eca5ad5fca6c58a + app_secret: 5d07c65f44fa1beb08b36f90af314aef + apiBody: "{\"grant_type\":\"token\",\"app_id\":\"623c3c2f1eca5ad5fca6c58a\",\"app_secret\":\"5d07c65f44fa1beb08b36f90af314aef\"}" + permissionApi: https://omapi.osinfra.cn/oneid/manager/u/permissions?community=openeuler + + +sa-token: + # token 名称(同时也是 cookie 名称) + token-name: satoken + # token 有效期(单位:秒) 默认30天,-1 代表永久有效 + timeout: 1440 + # token 最低活跃频率(单位:秒),如果 token 超过此时间没有访问系统就会被冻结,默认-1 代表不限制,永不冻结 + active-timeout: 300 + # 是否允许同一账号多地同时登录 (为 true 时允许一起登录, 为 false 时新登录挤掉旧登录) + is-concurrent: true + # 在多人登录同一账号时,是否共用一个 token (为 true 时所有登录共用一个 token, 为 false 时每次登录新建一个 token) + is-share: true + # token 风格(默认可取值:uuid、simple-uuid、random-32、random-64、random-128、tik) + token-style: random-128 + # 是否输出操作日志 + is-log: true \ No newline at end of file -- Gitee From f7906e4e0b9d9e48bac315abace85f8761881f0c Mon Sep 17 00:00:00 2001 From: liulxb <1964023718@qq.com> Date: Tue, 16 Jul 2024 15:30:16 +0800 Subject: [PATCH 02/15] =?UTF-8?q?#=E7=94=A8=E6=88=B7=E6=9D=83=E9=99=90?= =?UTF-8?q?=E8=AE=A4=E8=AF=81=5F20240716=5F1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 调整注释和返回信息 --- .../easysoftware/common/aop/PreUserPermissionAspect.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/easysoftware/common/aop/PreUserPermissionAspect.java b/src/main/java/com/easysoftware/common/aop/PreUserPermissionAspect.java index aca1bb5..fe81d57 100644 --- a/src/main/java/com/easysoftware/common/aop/PreUserPermissionAspect.java +++ b/src/main/java/com/easysoftware/common/aop/PreUserPermissionAspect.java @@ -2,6 +2,7 @@ package com.easysoftware.common.aop; import com.easysoftware.common.account.UserPermission; import com.easysoftware.common.annotation.PreUserPermission; +import com.easysoftware.common.exception.HttpRequestException; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; @@ -40,14 +41,16 @@ public class PreUserPermissionAspect { return ; } - /* 获取客户权限,检查 */ + /* 获取客户权限 */ HashSet permissionSet = userPermission.getPermissionList(); + + /* 检查客户权限是否满足访问权限 */ for (String item:paramValues) { if (permissionSet.contains(item)) { return ; } } - throw new Exception("您无权限访问"); + throw new HttpRequestException("you do not have unauthorized access"); } } -- Gitee From 12a6ab3968af22382d6f086857e531ce1413f883 Mon Sep 17 00:00:00 2001 From: liulxb <1964023718@qq.com> Date: Tue, 16 Jul 2024 16:06:11 +0800 Subject: [PATCH 03/15] =?UTF-8?q?#=E7=94=A8=E6=88=B7=E6=9D=83=E9=99=90?= =?UTF-8?q?=E8=AE=A4=E8=AF=81=5F20240716=5F2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 删除上传的yml文件 --- src/main/resources/application.yaml | 115 ---------------------------- 1 file changed, 115 deletions(-) delete mode 100644 src/main/resources/application.yaml diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml deleted file mode 100644 index 763d3e8..0000000 --- a/src/main/resources/application.yaml +++ /dev/null @@ -1,115 +0,0 @@ -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://1.94.147.171:3306/easysoftware_test?characterEncoding=utf8&useSSL=false&autoReconnect=true&serverTimezone=UTC - username: gouzhonglin - password: XWj*6XTqxSDk!Gbr - jackson: - dataformat: yyyy-MM-dd HH:mm:ss - time-zone: GMT+8 - data: - redis: - host: 192.168.1.236 - port: 6379 - password: Apf!88QvjRQLpa9kCwUY - connect-timeout: 3000 - timeout: 2000 - poolmin-idel: 50 - poolmax-idel: 200 - poolmax: 200 - -redis-global: - expiration: 12 - caPath: C:\ca.crt - -dos-global: - rejectPeriod: 10 - rejectCount: 5 - -mybatis-plus: - configuration: - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl -server: - error: - path: /error - whitelabel: - enabled: false - port: 8080 - tomcat: - max-threads: 200 - connection-timeout: 20000 -bootstrap: - servers: 123.60.153.128:9094 - -producer: - acks: 1 - retries: 3 - retryBackoffMs: 1000 - batchSize: 16384 - lingerMs: 0 - topic: software_test - -consumer: - groupId: software_test - enableAutoCommit: false - autoCommitIntervalMs: 1000 - sessionTimeoutMs: 30000 - topic: - name: software_test - offset: 0:0 - -apppkg: - icon: - path: aa - -api: - repoMaintainer: test - repoInfo: test - repoDownload: test - repoSig: test - -obs: - endpoint: test - bucket: test - ak: test - sk: test - -logging: - file: - path: D:\easesoftware\localtest\log - level: - com: - easysoftware: - adapter: - query: debug - - -cookie: - token: - name: _Y_G_ - domains: easysoftware.test.osinfra.cn - -oneid: - manage: - tokenApi: https://omapi.osinfra.cn/oneid/manager/token - app_id: 623c3c2f1eca5ad5fca6c58a - app_secret: 5d07c65f44fa1beb08b36f90af314aef - apiBody: "{\"grant_type\":\"token\",\"app_id\":\"623c3c2f1eca5ad5fca6c58a\",\"app_secret\":\"5d07c65f44fa1beb08b36f90af314aef\"}" - permissionApi: https://omapi.osinfra.cn/oneid/manager/u/permissions?community=openeuler - - -sa-token: - # token 名称(同时也是 cookie 名称) - token-name: satoken - # token 有效期(单位:秒) 默认30天,-1 代表永久有效 - timeout: 1440 - # token 最低活跃频率(单位:秒),如果 token 超过此时间没有访问系统就会被冻结,默认-1 代表不限制,永不冻结 - active-timeout: 300 - # 是否允许同一账号多地同时登录 (为 true 时允许一起登录, 为 false 时新登录挤掉旧登录) - is-concurrent: true - # 在多人登录同一账号时,是否共用一个 token (为 true 时所有登录共用一个 token, 为 false 时每次登录新建一个 token) - is-share: true - # token 风格(默认可取值:uuid、simple-uuid、random-32、random-64、random-128、tik) - token-style: random-128 - # 是否输出操作日志 - is-log: true \ No newline at end of file -- Gitee From 17a5876594eaa9485161ee5c04013c58355c07db Mon Sep 17 00:00:00 2001 From: liulxb <1964023718@qq.com> Date: Tue, 16 Jul 2024 16:37:06 +0800 Subject: [PATCH 04/15] =?UTF-8?q?#=E7=94=A8=E6=88=B7=E6=9D=83=E9=99=90?= =?UTF-8?q?=E8=AE=A4=E8=AF=81=5F20240716=5F3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 优化代码格式(规范) --- .../query/ApplicationVersionQueryAdapter.java | 1 - .../adapter/query/UserAdapter.java | 19 ++++++------------- .../common/aop/PreUserPermissionAspect.java | 13 +++---------- 3 files changed, 9 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/easysoftware/adapter/query/ApplicationVersionQueryAdapter.java b/src/main/java/com/easysoftware/adapter/query/ApplicationVersionQueryAdapter.java index 76e7b77..e8e23ae 100644 --- a/src/main/java/com/easysoftware/adapter/query/ApplicationVersionQueryAdapter.java +++ b/src/main/java/com/easysoftware/adapter/query/ApplicationVersionQueryAdapter.java @@ -22,7 +22,6 @@ import com.easysoftware.application.applicationversion.dto.ApplicationColumnSear import com.easysoftware.application.applicationversion.dto.ApplicationVersionSearchCondition; import com.easysoftware.common.aop.RequestLimitRedis; -import cn.dev33.satoken.stp.StpUtil; import jakarta.validation.Valid; @RestController diff --git a/src/main/java/com/easysoftware/adapter/query/UserAdapter.java b/src/main/java/com/easysoftware/adapter/query/UserAdapter.java index b7e5acf..4ddf1c6 100644 --- a/src/main/java/com/easysoftware/adapter/query/UserAdapter.java +++ b/src/main/java/com/easysoftware/adapter/query/UserAdapter.java @@ -1,26 +1,19 @@ package com.easysoftware.adapter.query; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - +import cn.dev33.satoken.exception.NotLoginException; +import cn.dev33.satoken.stp.StpUtil; import com.easysoftware.common.constant.HttpConstant; import com.easysoftware.common.utils.ResultUtil; - import jakarta.servlet.http.Cookie; - -import org.springframework.beans.factory.annotation.Autowired; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; -import cn.dev33.satoken.exception.NotLoginException; - -import cn.dev33.satoken.stp.StpUtil; -import com.easysoftware.redis.RedisGateway; -import jakarta.servlet.http.HttpServletRequest; -import java.util.Optional; -import java.util.concurrent.TimeUnit; import java.util.Arrays; +import java.util.Optional; @RestController @RequestMapping("/user/") diff --git a/src/main/java/com/easysoftware/common/aop/PreUserPermissionAspect.java b/src/main/java/com/easysoftware/common/aop/PreUserPermissionAspect.java index fe81d57..d755c9f 100644 --- a/src/main/java/com/easysoftware/common/aop/PreUserPermissionAspect.java +++ b/src/main/java/com/easysoftware/common/aop/PreUserPermissionAspect.java @@ -6,7 +6,6 @@ import com.easysoftware.common.exception.HttpRequestException; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; -import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -20,15 +19,9 @@ import java.util.Objects; public class PreUserPermissionAspect { @Autowired - UserPermission userPermission; + private UserPermission userPermission; - /** - * Defines the pointcut for methods in specific packages. - */ - @Pointcut("@annotation(com.easysoftware.common.annotation.PreUserPermission)") - public void pointcut() {} - - @Before("pointcut()") + @Before("@annotation(com.easysoftware.common.annotation.PreUserPermission)") public void before(final JoinPoint joinPoint) throws Throwable { /* 获取PreUserPermission注解参数 */ MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); @@ -36,7 +29,7 @@ public class PreUserPermissionAspect { PreUserPermission preUserPermission = method.getAnnotation(PreUserPermission.class); String[] paramValues = preUserPermission.value(); - /* 未指定参数 */ + /* 方法使用注解,但未指定参数,默认无权限控制 */ if (Objects.isNull(paramValues) || 0 == paramValues.length) { return ; } -- Gitee From fbc22ad2c8fb06e30b5b058b66f7245220c45943 Mon Sep 17 00:00:00 2001 From: liulxb <1964023718@qq.com> Date: Tue, 16 Jul 2024 16:56:57 +0800 Subject: [PATCH 05/15] =?UTF-8?q?#=E7=94=A8=E6=88=B7=E6=9D=83=E9=99=90?= =?UTF-8?q?=E8=AE=A4=E8=AF=81=5F20240716=5F4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 优化代码格式(规范) --- .../common/annotation/PreUserPermission.java | 8 +++++++- .../easysoftware/common/aop/PreUserPermissionAspect.java | 9 +++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/easysoftware/common/annotation/PreUserPermission.java b/src/main/java/com/easysoftware/common/annotation/PreUserPermission.java index 1178d86..b92a240 100644 --- a/src/main/java/com/easysoftware/common/annotation/PreUserPermission.java +++ b/src/main/java/com/easysoftware/common/annotation/PreUserPermission.java @@ -3,12 +3,18 @@ package com.easysoftware.common.annotation; import java.lang.annotation.*; /** - * This annotation is used for authentication + * This annotation is used for authentication. */ @Target({ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented public @interface PreUserPermission { + + /** + * Specifies the number of allowed requests (default value: 5). + * + * @return Default to empty. + */ String[] value() default {} ; } diff --git a/src/main/java/com/easysoftware/common/aop/PreUserPermissionAspect.java b/src/main/java/com/easysoftware/common/aop/PreUserPermissionAspect.java index d755c9f..f82c65c 100644 --- a/src/main/java/com/easysoftware/common/aop/PreUserPermissionAspect.java +++ b/src/main/java/com/easysoftware/common/aop/PreUserPermissionAspect.java @@ -18,9 +18,18 @@ import java.util.Objects; @Component public class PreUserPermissionAspect { + /** + * Autowired UserPermission for get user permission. + */ @Autowired private UserPermission userPermission; + /** + * Advice method called before a method with PreUserPermission, and authentication. + * @param joinPoint The JoinPoint representing the intercepted method. + * @return void No return value. + * @throws Throwable if an error occurs during method execution, or authentication fail. + */ @Before("@annotation(com.easysoftware.common.annotation.PreUserPermission)") public void before(final JoinPoint joinPoint) throws Throwable { /* 获取PreUserPermission注解参数 */ -- Gitee From edb50269a33c3e88ae55ac86a9c159e7efa64a6b Mon Sep 17 00:00:00 2001 From: liulxb <1964023718@qq.com> Date: Tue, 16 Jul 2024 17:09:41 +0800 Subject: [PATCH 06/15] =?UTF-8?q?#=E7=94=A8=E6=88=B7=E6=9D=83=E9=99=90?= =?UTF-8?q?=E8=AE=A4=E8=AF=81=5F20240716=5F5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 优化代码格式(规范) --- .../easysoftware/common/account/UserPermission.java | 13 ++++++------- .../common/annotation/PreUserPermission.java | 10 ++++++++-- .../common/aop/PreUserPermissionAspect.java | 5 ++--- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/easysoftware/common/account/UserPermission.java b/src/main/java/com/easysoftware/common/account/UserPermission.java index fc21145..2f12f01 100644 --- a/src/main/java/com/easysoftware/common/account/UserPermission.java +++ b/src/main/java/com/easysoftware/common/account/UserPermission.java @@ -36,8 +36,8 @@ public class UserPermission { private String permissionApi; /** - * Get user permission by user token and manage token - * @return + * Get user permission by user token and manage token. + * @return Collection of user permissions. */ public HashSet getPermissionList() { // 使用获取userToken @@ -62,7 +62,6 @@ public class UserPermission { } // 设置权限 - //TODO 这个地方用Set可以吗?(方便外面的权限匹配) JsonNode permissions = resJson.get("data").get("permissions"); HashSet permissionSet = new HashSet<>(); for (JsonNode per : permissions) { @@ -73,8 +72,8 @@ public class UserPermission { } /** - * Get manage token - * @return manage token + * Get manage token. + * @return manage token. */ private String getManageToken() { String response = HttpClientUtil.postHttpClient(manageTokenApi, manageApiBody); @@ -83,8 +82,8 @@ public class UserPermission { } /** - * Get user token - * @return user token + * Get user token. + * @return user token. */ private String getUserToken() { ServletRequestAttributes servletRequestAttributes = diff --git a/src/main/java/com/easysoftware/common/annotation/PreUserPermission.java b/src/main/java/com/easysoftware/common/annotation/PreUserPermission.java index b92a240..3f18fbc 100644 --- a/src/main/java/com/easysoftware/common/annotation/PreUserPermission.java +++ b/src/main/java/com/easysoftware/common/annotation/PreUserPermission.java @@ -1,6 +1,12 @@ package com.easysoftware.common.annotation; -import java.lang.annotation.*; +import java.lang.annotation.ElementType; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.lang.annotation.Retention; +import java.lang.annotation.Inherited; +import java.lang.annotation.Documented; + /** * This annotation is used for authentication. @@ -16,5 +22,5 @@ public @interface PreUserPermission { * * @return Default to empty. */ - String[] value() default {} ; + String[] value() default {}; } diff --git a/src/main/java/com/easysoftware/common/aop/PreUserPermissionAspect.java b/src/main/java/com/easysoftware/common/aop/PreUserPermissionAspect.java index f82c65c..376051c 100644 --- a/src/main/java/com/easysoftware/common/aop/PreUserPermissionAspect.java +++ b/src/main/java/com/easysoftware/common/aop/PreUserPermissionAspect.java @@ -27,7 +27,6 @@ public class PreUserPermissionAspect { /** * Advice method called before a method with PreUserPermission, and authentication. * @param joinPoint The JoinPoint representing the intercepted method. - * @return void No return value. * @throws Throwable if an error occurs during method execution, or authentication fail. */ @Before("@annotation(com.easysoftware.common.annotation.PreUserPermission)") @@ -40,7 +39,7 @@ public class PreUserPermissionAspect { /* 方法使用注解,但未指定参数,默认无权限控制 */ if (Objects.isNull(paramValues) || 0 == paramValues.length) { - return ; + return; } /* 获取客户权限 */ @@ -49,7 +48,7 @@ public class PreUserPermissionAspect { /* 检查客户权限是否满足访问权限 */ for (String item:paramValues) { if (permissionSet.contains(item)) { - return ; + return; } } -- Gitee From d40b5f5f7df8b0a3e24a512ae12a95e2a9a0eac5 Mon Sep 17 00:00:00 2001 From: liulxb <1964023718@qq.com> Date: Wed, 17 Jul 2024 19:04:03 +0800 Subject: [PATCH 07/15] =?UTF-8?q?#=E7=94=A8=E6=88=B7=E6=9D=83=E9=99=90?= =?UTF-8?q?=E8=AE=A4=E8=AF=81=5F20240716=5F6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 报错信息优化+增加权限常量 --- .../query/ApplicationVersionQueryAdapter.java | 5 +++-- .../common/account/UerPermissionDef.java | 13 +++++++++++++ .../easysoftware/common/account/UserPermission.java | 5 +++-- 3 files changed, 19 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/easysoftware/common/account/UerPermissionDef.java diff --git a/src/main/java/com/easysoftware/adapter/query/ApplicationVersionQueryAdapter.java b/src/main/java/com/easysoftware/adapter/query/ApplicationVersionQueryAdapter.java index e8e23ae..7064977 100644 --- a/src/main/java/com/easysoftware/adapter/query/ApplicationVersionQueryAdapter.java +++ b/src/main/java/com/easysoftware/adapter/query/ApplicationVersionQueryAdapter.java @@ -11,6 +11,7 @@ package com.easysoftware.adapter.query; +import com.easysoftware.common.account.UerPermissionDef; import com.easysoftware.common.annotation.PreUserPermission; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; @@ -42,7 +43,7 @@ public class ApplicationVersionQueryAdapter { */ @GetMapping() @RequestLimitRedis() - @PreUserPermission("easysoftwareread") + @PreUserPermission(UerPermissionDef.USER_PERMISSION_READ) public ResponseEntity searchAppVersion(@Valid final ApplicationVersionSearchCondition condition) { // 检查会话权限 return appVersionService.searchAppVersion(condition); @@ -57,7 +58,7 @@ public class ApplicationVersionQueryAdapter { */ @GetMapping("/column") @RequestLimitRedis() - @PreUserPermission("easysoftwareread") + @PreUserPermission(UerPermissionDef.USER_PERMISSION_READ) public ResponseEntity searchAppVerColumn(@Valid final ApplicationColumnSearchCondition condition) { // 检查会话权限 return appVersionService.searchAppVerColumn(condition); diff --git a/src/main/java/com/easysoftware/common/account/UerPermissionDef.java b/src/main/java/com/easysoftware/common/account/UerPermissionDef.java new file mode 100644 index 0000000..eaa5f35 --- /dev/null +++ b/src/main/java/com/easysoftware/common/account/UerPermissionDef.java @@ -0,0 +1,13 @@ +package com.easysoftware.common.account; + + +public class UerPermissionDef { + /** + * 用户权限:easysoftwareread + */ + public static final String USER_PERMISSION_READ = "easysoftwareread"; + + private void UserPermission() { + throw new RuntimeException("Not supported for instantiation"); + } +} diff --git a/src/main/java/com/easysoftware/common/account/UserPermission.java b/src/main/java/com/easysoftware/common/account/UserPermission.java index 2f12f01..84dc726 100644 --- a/src/main/java/com/easysoftware/common/account/UserPermission.java +++ b/src/main/java/com/easysoftware/common/account/UserPermission.java @@ -1,5 +1,6 @@ package com.easysoftware.common.account; +import cn.dev33.satoken.exception.NotLoginException; import com.easysoftware.common.constant.HttpConstant; import com.easysoftware.common.exception.HttpRequestException; import com.easysoftware.common.utils.HttpClientUtil; @@ -89,13 +90,13 @@ public class UserPermission { ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); if (Objects.isNull(servletRequestAttributes)) { - throw new HttpRequestException("unauthorized, missing token"); + throw new HttpRequestException("http request content error"); } HttpServletRequest httpServletRequest = servletRequestAttributes.getRequest(); String userToken = httpServletRequest.getHeader(HttpConstant.TOKEN); if (null == userToken) { - throw new HttpRequestException("unauthorized, missing token"); + throw new NotLoginException("user token expired or no login", "", ""); } return userToken; -- Gitee From 5b6e062cb08f0df6e9dc2ce2c924c93a2997496f Mon Sep 17 00:00:00 2001 From: liulxb <1964023718@qq.com> Date: Wed, 17 Jul 2024 19:14:48 +0800 Subject: [PATCH 08/15] =?UTF-8?q?#=E7=94=A8=E6=88=B7=E6=9D=83=E9=99=90?= =?UTF-8?q?=E8=AE=A4=E8=AF=81=5F20240716=5F7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 代码优化 --- .../com/easysoftware/common/account/UerPermissionDef.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/easysoftware/common/account/UerPermissionDef.java b/src/main/java/com/easysoftware/common/account/UerPermissionDef.java index eaa5f35..ca81089 100644 --- a/src/main/java/com/easysoftware/common/account/UerPermissionDef.java +++ b/src/main/java/com/easysoftware/common/account/UerPermissionDef.java @@ -1,13 +1,12 @@ package com.easysoftware.common.account; - public class UerPermissionDef { /** - * 用户权限:easysoftwareread + * user permission - easysoftwareread. */ public static final String USER_PERMISSION_READ = "easysoftwareread"; - private void UserPermission() { + private UerPermissionDef() { throw new RuntimeException("Not supported for instantiation"); } } -- Gitee From 93d72cabe1062ec6de5187c16298fa0193c1514f Mon Sep 17 00:00:00 2001 From: liulxb <1964023718@qq.com> Date: Wed, 17 Jul 2024 19:16:56 +0800 Subject: [PATCH 09/15] =?UTF-8?q?#=E7=94=A8=E6=88=B7=E6=9D=83=E9=99=90?= =?UTF-8?q?=E8=AE=A4=E8=AF=81=5F20240716=5F8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 代码优化 --- .../java/com/easysoftware/common/account/UerPermissionDef.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/easysoftware/common/account/UerPermissionDef.java b/src/main/java/com/easysoftware/common/account/UerPermissionDef.java index ca81089..db81a11 100644 --- a/src/main/java/com/easysoftware/common/account/UerPermissionDef.java +++ b/src/main/java/com/easysoftware/common/account/UerPermissionDef.java @@ -1,6 +1,6 @@ package com.easysoftware.common.account; -public class UerPermissionDef { +public final class UerPermissionDef { /** * user permission - easysoftwareread. */ -- Gitee From d82916d96e97fc029e5d06ddce93b1a7dbde30d0 Mon Sep 17 00:00:00 2001 From: liulxb <1964023718@qq.com> Date: Thu, 18 Jul 2024 21:59:37 +0800 Subject: [PATCH 10/15] =?UTF-8?q?#=E7=94=A8=E6=88=B7=E6=9D=83=E9=99=90?= =?UTF-8?q?=E8=AE=A4=E8=AF=81=5F20240716=5F9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 获取cookie --- .../common/account/UserPermission.java | 42 ++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/easysoftware/common/account/UserPermission.java b/src/main/java/com/easysoftware/common/account/UserPermission.java index 84dc726..cfb924b 100644 --- a/src/main/java/com/easysoftware/common/account/UserPermission.java +++ b/src/main/java/com/easysoftware/common/account/UserPermission.java @@ -6,14 +6,17 @@ import com.easysoftware.common.exception.HttpRequestException; import com.easysoftware.common.utils.HttpClientUtil; import com.easysoftware.common.utils.ObjectMapperUtil; import com.fasterxml.jackson.databind.JsonNode; +import jakarta.servlet.http.Cookie; import jakarta.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; +import java.util.Arrays; import java.util.HashSet; import java.util.Objects; +import java.util.Optional; @Component public class UserPermission { @@ -36,6 +39,12 @@ public class UserPermission { @Value("${oneid.permissionApi}") private String permissionApi; + /** + * Value injected for the cookie token name. + */ + @Value("${cookie.token.name}") + private String cookieTokenName; + /** * Get user permission by user token and manage token. * @return Collection of user permissions. @@ -48,7 +57,8 @@ public class UserPermission { String manageToken = getManageToken(); // 使用userToke、manageToken查询用户权限 - String response = HttpClientUtil.getHttpClient(permissionApi, manageToken, userToken, userToken); + Cookie cookie = getCookie(cookieTokenName); + String response = HttpClientUtil.getHttpClient(permissionApi, manageToken, userToken, cookie.getValue()); JsonNode resJson = ObjectMapperUtil.toJsonNode(response); String resStaus = resJson.get("status").asText(); @@ -102,4 +112,34 @@ public class UserPermission { return userToken; } + /** + * Get a cookie from the HttpServletRequest. + * + * @param cookieName The name of the cookie to be obtained. + * @return cookie . + */ + private Cookie getCookie(String cookieName) { + ServletRequestAttributes servletRequestAttributes = + (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + if (Objects.isNull(servletRequestAttributes)) { + throw new HttpRequestException("http request content error"); + } + + Cookie[] cookies = servletRequestAttributes.getRequest().getCookies(); + Cookie cookie = null; + if (null != cookies) { + // 获取cookie中的token + Optional first = Arrays.stream(cookies).filter(c -> cookieName.equals(c.getName())) + .findFirst(); + if (first.isPresent()) { + cookie = first.get(); + } + } + + if (null == cookie) { + throw new NotLoginException("user token expired or no login", "", ""); + } + return cookie; + } + } -- Gitee From b229d118b76662a37f0f8f94ee54737a806773ec Mon Sep 17 00:00:00 2001 From: liulxb <1964023718@qq.com> Date: Fri, 19 Jul 2024 10:57:43 +0800 Subject: [PATCH 11/15] =?UTF-8?q?#=E7=94=A8=E6=88=B7=E6=9D=83=E9=99=90?= =?UTF-8?q?=E8=AE=A4=E8=AF=81=5F20240716=5F10?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 权限请求处理优化 --- .../com/easysoftware/common/account/UserPermission.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/easysoftware/common/account/UserPermission.java b/src/main/java/com/easysoftware/common/account/UserPermission.java index cfb924b..e6e3356 100644 --- a/src/main/java/com/easysoftware/common/account/UserPermission.java +++ b/src/main/java/com/easysoftware/common/account/UserPermission.java @@ -61,10 +61,10 @@ public class UserPermission { String response = HttpClientUtil.getHttpClient(permissionApi, manageToken, userToken, cookie.getValue()); JsonNode resJson = ObjectMapperUtil.toJsonNode(response); - String resStaus = resJson.get("status").asText(); + String resCode = resJson.get("code").asText(); // 查询权限失败 - if (!resStaus.equals("200")) { - throw new HttpRequestException("query oneid failed"); + if (!"200".equals(resCode)) { + throw new HttpRequestException("query user permissions failed"); } // 空权限账户 -- Gitee From 5c0e47e51e9db23784f207457e54299e7d8c1d8c Mon Sep 17 00:00:00 2001 From: liulxb <1964023718@qq.com> Date: Fri, 19 Jul 2024 11:07:54 +0800 Subject: [PATCH 12/15] =?UTF-8?q?#=E7=94=A8=E6=88=B7=E6=9D=83=E9=99=90?= =?UTF-8?q?=E8=AE=A4=E8=AF=81=5F20240716=5F11?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit dockerfile --- Dockerfile | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Dockerfile b/Dockerfile index 6a89df5..3444462 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,14 +6,14 @@ RUN sed -i "s|repo.openeuler.org|mirrors.nju.edu.cn/openeuler|g" /etc/yum.repos. RUN cd / \ && yum install -y wget \ - && wget https://mirrors.tuna.tsinghua.edu.cn/Adoptium/17/jdk/x64/linux/OpenJDK17U-jdk_x64_linux_hotspot_17.0.11_9.tar.gz \ - && tar -zxvf OpenJDK17U-jdk_x64_linux_hotspot_17.0.11_9.tar.gz \ + && wget https://mirrors.tuna.tsinghua.edu.cn/Adoptium/17/jdk/x64/linux/OpenJDK17U-jdk_x64_linux_hotspot_17.0.12_7.tar.gz \ + && tar -zxvf OpenJDK17U-jdk_x64_linux_hotspot_17.0.12_7.tar.gz \ && wget https://repo.huaweicloud.com/apache/maven/maven-3/3.8.1/binaries/apache-maven-3.8.1-bin.tar.gz \ && tar -zxvf apache-maven-3.8.1-bin.tar.gz COPY . /EasySoftware -ENV JAVA_HOME=/jdk-17.0.11+9 +ENV JAVA_HOME=/jdk-17.0.12+7 ENV PATH=${JAVA_HOME}/bin:$PATH ENV MAVEN_HOME=/apache-maven-3.8.1 @@ -26,7 +26,7 @@ FROM openeuler/openeuler:22.03-lts-sp1 RUN sed -i "s|repo.openeuler.org|mirrors.nju.edu.cn/openeuler|g" /etc/yum.repos.d/openEuler.repo \ && sed -i '/metalink/d' /etc/yum.repos.d/openEuler.repo \ - && sed -i '/metadata_expire/d' /etc/yum.repos.d/openEuler.repo + && sed -i '/metadata_expire/d' /etc/yum.repos.d/openEuler.repo RUN yum update -y \ && yum install -y shadow passwd @@ -56,10 +56,10 @@ RUN passwd -l easysoftware \ && echo "export TMOUT=1800 readonly TMOUT" >> /etc/profile RUN dnf install -y wget \ - && wget https://mirrors.tuna.tsinghua.edu.cn/Adoptium/17/jre/x64/linux/OpenJDK17U-jre_x64_linux_hotspot_17.0.11_9.tar.gz \ - && tar -zxvf OpenJDK17U-jre_x64_linux_hotspot_17.0.11_9.tar.gz \ - && rm OpenJDK17U-jre_x64_linux_hotspot_17.0.11_9.tar.gz \ - && chown -R easysoftware:easysoftware jdk-17.0.11+9-jre + && wget https://mirrors.tuna.tsinghua.edu.cn/Adoptium/17/jre/x64/linux/OpenJDK17U-jre_x64_linux_hotspot_17.0.12_7.tar.gz \ + && tar -zxvf OpenJDK17U-jre_x64_linux_hotspot_17.0.12_7.tar.gz \ + && rm OpenJDK17U-jre_x64_linux_hotspot_17.0.12_7.tar.gz \ + && chown -R easysoftware:easysoftware jdk-17.0.12+7-jre RUN rm -rf `find / -iname "*tcpdump*"` \ && rm -rf `find / -iname "*sniffer*"` \ @@ -83,7 +83,7 @@ RUN rm -rf /usr/bin/gdb* \ && yum clean all \ && chmod 500 -R /home/easysoftware -ENV JAVA_HOME=${WORKSPACE}/jdk-17.0.11+9-jre +ENV JAVA_HOME=${WORKSPACE}/jdk-17.0.12+7-jre ENV PATH=${JAVA_HOME}/bin:$PATH ENV LANG="C.UTF-8" -- Gitee From 61a1bc9e8b1dba903eadec6b8eea5bd6cf3538af Mon Sep 17 00:00:00 2001 From: liulxb <1964023718@qq.com> Date: Fri, 19 Jul 2024 14:11:23 +0800 Subject: [PATCH 13/15] =?UTF-8?q?#=E7=94=A8=E6=88=B7=E6=9D=83=E9=99=90?= =?UTF-8?q?=E8=AE=A4=E8=AF=81=5F20240716=5F12?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 代码恢复 --- .../adapter/query/UserAdapter.java | 34 +++++++++++++++---- 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/easysoftware/adapter/query/UserAdapter.java b/src/main/java/com/easysoftware/adapter/query/UserAdapter.java index 4ddf1c6..7f9c320 100644 --- a/src/main/java/com/easysoftware/adapter/query/UserAdapter.java +++ b/src/main/java/com/easysoftware/adapter/query/UserAdapter.java @@ -1,19 +1,26 @@ package com.easysoftware.adapter.query; -import cn.dev33.satoken.exception.NotLoginException; -import cn.dev33.satoken.stp.StpUtil; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + import com.easysoftware.common.constant.HttpConstant; import com.easysoftware.common.utils.ResultUtil; + import jakarta.servlet.http.Cookie; -import jakarta.servlet.http.HttpServletRequest; + +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; -import java.util.Arrays; +import cn.dev33.satoken.exception.NotLoginException; + +import cn.dev33.satoken.stp.StpUtil; +import com.easysoftware.redis.RedisGateway; +import jakarta.servlet.http.HttpServletRequest; import java.util.Optional; +import java.util.concurrent.TimeUnit; +import java.util.Arrays; @RestController @RequestMapping("/user/") @@ -24,6 +31,12 @@ public class UserAdapter { @Value("${cookie.token.name}") private String cookieTokenName; + /** + * Autowired redisGateway. + */ + @Autowired + private RedisGateway redisGateway; + /** * Verify login status from oneid, and maintain session. * @@ -45,6 +58,11 @@ public class UserAdapter { throw new NotLoginException("oneid unloggin, missing token", "", ""); } + // 用户已经真正登录oneid 以usertoken登录 并维持会话 + // 设置用户会话token + StpUtil.login(userToken); + redisGateway.setWithExpire(userToken, userToken, 300, TimeUnit.SECONDS); + return ResultUtil.success(HttpStatus.OK); } @@ -59,6 +77,10 @@ public class UserAdapter { // 用户退出 删除token信息 String userToken = httpServletRequest.getHeader(HttpConstant.TOKEN); + if (redisGateway.hasKey(userToken)) { + redisGateway.detele(userToken); + } + StpUtil.logout(); return ResultUtil.success(HttpStatus.OK); -- Gitee From 1b687e73834b3c555baeb423a022d9b4550d5872 Mon Sep 17 00:00:00 2001 From: liulxb <1964023718@qq.com> Date: Tue, 16 Jul 2024 14:54:48 +0800 Subject: [PATCH 14/15] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E7=89=88=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 调整注释和返回信息 t push 删除上传的yml文件 优化代码格式(规范) 优化代码格式(规范) 优化代码格式(规范) cve 【feature】推荐修改类别功能 报错信息优化+增加权限常量 代码优化 代码优化 获取cookie 权限请求处理优化 dockerfile 代码恢复 --- Dockerfile | 18 +- pom.xml | 12 + .../query/ApplicationVersionQueryAdapter.java | 7 +- .../common/account/UerPermissionDef.java | 12 + .../common/account/UserPermission.java | 145 ++++++++++++ .../common/annotation/PreUserPermission.java | 26 +++ .../common/aop/PreUserPermissionAspect.java | 57 +++++ .../common/constant/PackageConstant.java | 34 +++ .../gateway/OperationConfigGateway.java | 27 ++- .../OperationConfigGatewayImpl.java | 35 +++ .../java/com/easysoftware/ranking/Ranker.java | 8 +- .../com/easysoftware/ranking/RankerImpl.java | 213 +++++++++++++++++- 12 files changed, 575 insertions(+), 19 deletions(-) create mode 100644 src/main/java/com/easysoftware/common/account/UerPermissionDef.java create mode 100644 src/main/java/com/easysoftware/common/account/UserPermission.java create mode 100644 src/main/java/com/easysoftware/common/annotation/PreUserPermission.java create mode 100644 src/main/java/com/easysoftware/common/aop/PreUserPermissionAspect.java diff --git a/Dockerfile b/Dockerfile index 6a89df5..3444462 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,14 +6,14 @@ RUN sed -i "s|repo.openeuler.org|mirrors.nju.edu.cn/openeuler|g" /etc/yum.repos. RUN cd / \ && yum install -y wget \ - && wget https://mirrors.tuna.tsinghua.edu.cn/Adoptium/17/jdk/x64/linux/OpenJDK17U-jdk_x64_linux_hotspot_17.0.11_9.tar.gz \ - && tar -zxvf OpenJDK17U-jdk_x64_linux_hotspot_17.0.11_9.tar.gz \ + && wget https://mirrors.tuna.tsinghua.edu.cn/Adoptium/17/jdk/x64/linux/OpenJDK17U-jdk_x64_linux_hotspot_17.0.12_7.tar.gz \ + && tar -zxvf OpenJDK17U-jdk_x64_linux_hotspot_17.0.12_7.tar.gz \ && wget https://repo.huaweicloud.com/apache/maven/maven-3/3.8.1/binaries/apache-maven-3.8.1-bin.tar.gz \ && tar -zxvf apache-maven-3.8.1-bin.tar.gz COPY . /EasySoftware -ENV JAVA_HOME=/jdk-17.0.11+9 +ENV JAVA_HOME=/jdk-17.0.12+7 ENV PATH=${JAVA_HOME}/bin:$PATH ENV MAVEN_HOME=/apache-maven-3.8.1 @@ -26,7 +26,7 @@ FROM openeuler/openeuler:22.03-lts-sp1 RUN sed -i "s|repo.openeuler.org|mirrors.nju.edu.cn/openeuler|g" /etc/yum.repos.d/openEuler.repo \ && sed -i '/metalink/d' /etc/yum.repos.d/openEuler.repo \ - && sed -i '/metadata_expire/d' /etc/yum.repos.d/openEuler.repo + && sed -i '/metadata_expire/d' /etc/yum.repos.d/openEuler.repo RUN yum update -y \ && yum install -y shadow passwd @@ -56,10 +56,10 @@ RUN passwd -l easysoftware \ && echo "export TMOUT=1800 readonly TMOUT" >> /etc/profile RUN dnf install -y wget \ - && wget https://mirrors.tuna.tsinghua.edu.cn/Adoptium/17/jre/x64/linux/OpenJDK17U-jre_x64_linux_hotspot_17.0.11_9.tar.gz \ - && tar -zxvf OpenJDK17U-jre_x64_linux_hotspot_17.0.11_9.tar.gz \ - && rm OpenJDK17U-jre_x64_linux_hotspot_17.0.11_9.tar.gz \ - && chown -R easysoftware:easysoftware jdk-17.0.11+9-jre + && wget https://mirrors.tuna.tsinghua.edu.cn/Adoptium/17/jre/x64/linux/OpenJDK17U-jre_x64_linux_hotspot_17.0.12_7.tar.gz \ + && tar -zxvf OpenJDK17U-jre_x64_linux_hotspot_17.0.12_7.tar.gz \ + && rm OpenJDK17U-jre_x64_linux_hotspot_17.0.12_7.tar.gz \ + && chown -R easysoftware:easysoftware jdk-17.0.12+7-jre RUN rm -rf `find / -iname "*tcpdump*"` \ && rm -rf `find / -iname "*sniffer*"` \ @@ -83,7 +83,7 @@ RUN rm -rf /usr/bin/gdb* \ && yum clean all \ && chmod 500 -R /home/easysoftware -ENV JAVA_HOME=${WORKSPACE}/jdk-17.0.11+9-jre +ENV JAVA_HOME=${WORKSPACE}/jdk-17.0.12+7-jre ENV PATH=${JAVA_HOME}/bin:$PATH ENV LANG="C.UTF-8" diff --git a/pom.xml b/pom.xml index b089613..d904b4a 100644 --- a/pom.xml +++ b/pom.xml @@ -22,6 +22,18 @@ spring-boot-starter + + org.apache.tomcat.embed + tomcat-embed-core + 10.1.25 + + + + org.apache.tomcat.embed + tomcat-embed-websocket + 10.1.25 + +