From 33821e5af554dc76f520b8bd3b330e922c36901c Mon Sep 17 00:00:00 2001 From: republicline <1464474399@qq.com> Date: Tue, 3 Sep 2024 17:48:05 +0800 Subject: [PATCH] =?UTF-8?q?add:=20=E5=88=87=E6=8D=A2=E5=8C=BB=E9=99=A2,?= =?UTF-8?q?=E5=B1=95=E7=A4=BA=E4=B8=8D=E5=90=8C=E5=8C=BB=E9=99=A2=E7=9A=84?= =?UTF-8?q?=E6=95=B0=E6=8D=AE,=20todo:=20=E6=97=A5=E5=BF=97=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E7=9A=84=E5=8A=9F=E8=83=BD,=20=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E4=BF=A1=E6=81=AF,=E5=8C=85=E5=90=ABws?= =?UTF-8?q?=E5=8D=8F=E8=AE=AE=E4=B8=AD=E7=9A=84=E8=BF=9E=E6=8E=A5=E5=92=8C?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/rax/admin/utils/AuthUtils.java | 47 ++++++++ .../vital/common/util/SysLoggerBuilder.java | 106 ++++++++++++++++++ 2 files changed, 153 insertions(+) create mode 100644 upms/upms-biz/src/main/java/com/rax/admin/utils/AuthUtils.java create mode 100644 upms/upms-biz/src/main/java/com/rax/vital/common/util/SysLoggerBuilder.java diff --git a/upms/upms-biz/src/main/java/com/rax/admin/utils/AuthUtils.java b/upms/upms-biz/src/main/java/com/rax/admin/utils/AuthUtils.java new file mode 100644 index 0000000..ef49449 --- /dev/null +++ b/upms/upms-biz/src/main/java/com/rax/admin/utils/AuthUtils.java @@ -0,0 +1,47 @@ +package com.rax.admin.utils; + +import cn.hutool.core.convert.Convert; +import com.rax.admin.immu.RoleRecord; +import com.rax.common.core.constant.CacheConstants; +import com.rax.common.core.util.RedisUtils; +import com.rax.common.security.service.RaxUser; + +import java.util.List; + +/** + * project_name:remote-control-backend + * time:2024/9/2 14:05 + */ +public class AuthUtils { + + /** + * 获取用户的当前医院信息 + */ + public static Long getCurrentHospital(RaxUser user) { + String key = CacheConstants.CURRENT_HOSPITAL + ":" + user.getId(); + if (RedisUtils.hasKey(key)) { + return Convert.toLong(RedisUtils.get(key)); + }else { + RedisUtils.set(key, user.getHospitalId()); + return user.getHospitalId(); + } + } + + + /** + * 当前用户是否拥有,adminRole权限 + */ + public static boolean authAdmin(RaxUser user) { + List roleCodeList = user.getRoleCodeList(); + return roleCodeList.contains(RoleRecord.ADMIN_ROLE_CODE); + } + + /** + * 判断用户的角色标识信息 + */ + public static boolean hasRoleCode(RaxUser user, String roleCode) { + List roleCodeList = user.getRoleCodeList(); + return roleCodeList.contains(roleCode); + } + +} diff --git a/upms/upms-biz/src/main/java/com/rax/vital/common/util/SysLoggerBuilder.java b/upms/upms-biz/src/main/java/com/rax/vital/common/util/SysLoggerBuilder.java new file mode 100644 index 0000000..d6b3bfc --- /dev/null +++ b/upms/upms-biz/src/main/java/com/rax/vital/common/util/SysLoggerBuilder.java @@ -0,0 +1,106 @@ +package com.rax.vital.common.util; + +import com.rax.admin.api.entity.SysLog; +import com.rax.common.security.service.RaxUser; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; +import org.springframework.http.server.ServerHttpRequest; +import org.springframework.security.oauth2.core.OAuth2AccessToken; +import org.springframework.security.oauth2.server.authorization.OAuth2Authorization; +import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationService; +import org.springframework.security.oauth2.server.authorization.OAuth2TokenType; +import org.springframework.stereotype.Component; +import org.springframework.web.socket.WebSocketSession; + +import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.util.HashMap; +import java.util.Map; + +/** + * project_name:remote-control-backend + * time:2024/9/3 15:17 + * 根据解析到的Token, 构造一个日志对象, 添加日志表中 + */ +@Component +public class SysLoggerBuilder { + + @Autowired + private OAuth2AuthorizationService authorizationService; + + + public SysLog buildSysLog(String token, String title, String logType, WebSocketSession session) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + // 从session中获取一些信息 + String ip = session.getRemoteAddress() != null ? session.getRemoteAddress().toString() : "unknown"; + String uri = session.getUri() != null ? session.getUri().toString() : "unknown"; + String userAgent = session.getHandshakeHeaders().getFirst("User-Agent") != null ? + session.getHandshakeHeaders().getFirst("User-Agent") : "unknown"; + String params = session.getUri() != null ? + session.getUri().getQuery() : "unknown"; + + // 解析token + OAuth2Authorization byToken = authorizationService.findByToken(token, OAuth2TokenType.ACCESS_TOKEN); + Map stringObjectMap = parseToken(token); + Long hospitalId = (Long) stringObjectMap.get("hospitalId"); + String userName = (String) stringObjectMap.get("userName"); + + + // 填充属性 + SysLog sysLog = new SysLog(); + sysLog.setLogType(logType); + sysLog.setTitle(title); + sysLog.setCreateTime(LocalDateTime.now()); + sysLog.setRemoteAddr(ip); + sysLog.setDelFlag("0"); + sysLog.setParams(params); + sysLog.setUserAgent(userAgent); + sysLog.setRequestUri(uri); + sysLog.setHospitalId(hospitalId); + sysLog.setCreateBy(userName); + return sysLog; + } + + public SysLog buildSysLog(String title, String logType, ServerHttpRequest request) { + + // 获取信息 + HttpHeaders headers = request.getHeaders(); + String req_url = headers.getFirst("origin"); + String agent = headers.getFirst("User-Agent"); + + // 获取解析token + String query = request.getURI().getQuery(); + String token = GetHttpParamUtil.getParam(query, "token"); + Map stringObjectMap = parseToken(token); + + String userName = (String) stringObjectMap.get("userName"); + Long hospitalId = (Long) stringObjectMap.get("hospitalId"); + + // 填充属性 + SysLog sysLog = new SysLog(); + sysLog.setLogType(logType); + sysLog.setTitle(title); + sysLog.setDelFlag("0"); + sysLog.setCreateBy(userName); + sysLog.setParams(query); + sysLog.setRemoteAddr(req_url); + sysLog.setMethod("ws"); + sysLog.setHospitalId(hospitalId); + sysLog.setCreateTime(LocalDateTime.now()); + return sysLog; + } + + + private Map parseToken(String token) { + HashMap map = new HashMap<>(); + OAuth2Authorization byToken = authorizationService.findByToken(token, OAuth2TokenType.ACCESS_TOKEN); + String userName = byToken.getPrincipalName(); + map.put("userName", userName); + OAuth2Authorization.Token accessToken = byToken.getAccessToken(); + RaxUser o = (RaxUser) accessToken.getClaims().get("user_info"); + Long hospitalId = o.getHospitalId(); + map.put("hospitalId", hospitalId); + return map; + } + +}