From 5b8c1b1e948732b8930c073aea8d7036130b493a Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 27 Nov 2024 15:23:49 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=99=BB=E5=BD=95=E8=AE=A4=E8=AF=81?= =?UTF-8?q?=E7=9A=84=E7=B1=BB=E5=9E=8B=E5=88=86=E4=B8=BAsys/u=EF=BC=8C?= =?UTF-8?q?=E5=AF=B9=E5=BA=94=E7=B3=BB=E7=BB=9F=E5=92=8C=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wfc-api/pom.xml | 1 + wfc-auth/pom.xml | 7 +- .../wfc/auth/controller/TokenController.java | 32 +++++-- .../org/wfc/auth/service/SysLoginService.java | 11 +-- .../org/wfc/auth/service/ULoginService.java | 24 ++--- .../wfc/auth/service/UPasswordService.java | 87 +++++++++++++++++++ .../wfc/auth/service/URecordLogService.java | 48 ++++++++++ .../core/constant/ServiceNameConstants.java | 6 ++ .../wfc/common/core/domain}/LoginUser.java | 16 ++-- .../wfc/common/core/web}/form/LoginBody.java | 2 +- .../common/core/web}/form/RegisterBody.java | 2 +- .../datascope/aspect/DataScopeAspect.java | 6 +- wfc-common/wfc-common-security/pom.xml | 7 +- .../wfc/common/security/auth/AuthLogic.java | 4 +- .../wfc/common/security/auth/AuthUtil.java | 2 +- .../interceptor/HeaderInterceptor.java | 2 +- .../common/security/service/TokenService.java | 36 +++++--- .../wfc/common/security/utils/DictUtils.java | 6 +- .../common/security/utils/SecurityUtils.java | 4 +- .../controller/SysProfileController.java | 18 ++-- .../system/controller/SysUserController.java | 12 +-- .../controller/SysUserOnlineController.java | 2 +- .../system/service/ISysUserOnlineService.java | 2 +- .../service/impl/SysDictTypeServiceImpl.java | 2 +- .../impl/SysUserOnlineServiceImpl.java | 2 +- 25 files changed, 262 insertions(+), 79 deletions(-) create mode 100644 wfc-auth/src/main/java/org/wfc/auth/service/UPasswordService.java create mode 100644 wfc-auth/src/main/java/org/wfc/auth/service/URecordLogService.java rename {wfc-api/wfc-api-system/src/main/java/org/wfc/system/api/model => wfc-common/wfc-common-core/src/main/java/org/wfc/common/core/domain}/LoginUser.java (87%) rename {wfc-auth/src/main/java/org/wfc/auth => wfc-common/wfc-common-core/src/main/java/org/wfc/common/core/web}/form/LoginBody.java (95%) rename {wfc-auth/src/main/java/org/wfc/auth => wfc-common/wfc-common-core/src/main/java/org/wfc/common/core/web}/form/RegisterBody.java (72%) diff --git a/wfc-api/pom.xml b/wfc-api/pom.xml index b7dd986..9b8d1db 100644 --- a/wfc-api/pom.xml +++ b/wfc-api/pom.xml @@ -11,6 +11,7 @@ wfc-api-system wfc-api-omada + wfc-api-user wfc-api diff --git a/wfc-auth/pom.xml b/wfc-auth/pom.xml index 49aaf53..ca6529a 100644 --- a/wfc-auth/pom.xml +++ b/wfc-auth/pom.xml @@ -56,7 +56,12 @@ org.wfc wfc-common-swagger - + + + + org.wfc + wfc-api-user + diff --git a/wfc-auth/src/main/java/org/wfc/auth/controller/TokenController.java b/wfc-auth/src/main/java/org/wfc/auth/controller/TokenController.java index 8df0db8..32b9447 100644 --- a/wfc-auth/src/main/java/org/wfc/auth/controller/TokenController.java +++ b/wfc-auth/src/main/java/org/wfc/auth/controller/TokenController.java @@ -1,21 +1,25 @@ package org.wfc.auth.controller; -import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; -import org.wfc.auth.form.LoginBody; -import org.wfc.auth.form.RegisterBody; +import org.wfc.common.core.web.form.LoginBody; +import org.wfc.common.core.web.form.RegisterBody; import org.wfc.auth.service.SysLoginService; +import org.wfc.auth.service.ULoginService; import org.wfc.common.core.domain.R; import org.wfc.common.core.utils.JwtUtils; import org.wfc.common.core.utils.StringUtils; import org.wfc.common.security.auth.AuthUtil; import org.wfc.common.security.service.TokenService; import org.wfc.common.security.utils.SecurityUtils; -import org.wfc.system.api.model.LoginUser; +import org.wfc.common.core.domain.LoginUser; +import org.wfc.system.api.domain.SysUser; +import org.wfc.user.api.domain.UUser; + +import javax.servlet.http.HttpServletRequest; /** * token 控制 @@ -31,13 +35,25 @@ public class TokenController @Autowired private SysLoginService sysLoginService; + @Autowired + private ULoginService uLoginService; + @PostMapping("login") public R login(@RequestBody LoginBody form) { - // 用户登录 - LoginUser userInfo = sysLoginService.login(form.getUsername(), form.getPassword()); - // 获取登录token - return R.ok(tokenService.createToken(userInfo)); + if ("u".equals(form.getAuthType())){ + // 用户登录 + LoginUser userInfo = uLoginService.login(form.getUsername(), form.getPassword()); + // 获取登录token + return R.ok(tokenService.createToken(userInfo)); + } if ("sys".equals(form.getAuthType())){ + // 用户登录 + LoginUser sysInfo = sysLoginService.login(form.getUsername(), form.getPassword()); + // 获取登录token + return R.ok(tokenService.createToken(sysInfo)); + } + + return R.fail("authentication type not supported"); } @DeleteMapping("logout") diff --git a/wfc-auth/src/main/java/org/wfc/auth/service/SysLoginService.java b/wfc-auth/src/main/java/org/wfc/auth/service/SysLoginService.java index fe74b1f..3c8a065 100644 --- a/wfc-auth/src/main/java/org/wfc/auth/service/SysLoginService.java +++ b/wfc-auth/src/main/java/org/wfc/auth/service/SysLoginService.java @@ -17,7 +17,8 @@ import org.wfc.common.redis.service.RedisService; import org.wfc.common.security.utils.SecurityUtils; import org.wfc.system.api.RemoteUserService; import org.wfc.system.api.domain.SysUser; -import org.wfc.system.api.model.LoginUser; +import org.wfc.common.core.domain.LoginUser; +import org.wfc.user.api.domain.UUser; /** * 登录校验方法 @@ -42,7 +43,7 @@ public class SysLoginService /** * 登录 */ - public LoginUser login(String username, String password) + public LoginUser login(String username, String password) { // 用户名或密码为空 错误 if (StringUtils.isAnyBlank(username, password)) @@ -72,7 +73,7 @@ public class SysLoginService throw new ServiceException("很遗憾,访问IP已被列入系统黑名单"); } // 查询用户信息 - R userResult = remoteUserService.getUserInfo(username, SecurityConstants.INNER); + R> userResult = remoteUserService.getUserInfo(username, SecurityConstants.INNER); if (StringUtils.isNull(userResult) || StringUtils.isNull(userResult.getData())) { @@ -85,8 +86,8 @@ public class SysLoginService throw new ServiceException(userResult.getMsg()); } - LoginUser userInfo = userResult.getData(); - SysUser user = userResult.getData().getSysUser(); + LoginUser userInfo = userResult.getData(); + SysUser user = userInfo.getUser(); if (UserStatus.DELETED.getCode().equals(user.getDelFlag())) { recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "对不起,您的账号已被删除"); diff --git a/wfc-auth/src/main/java/org/wfc/auth/service/ULoginService.java b/wfc-auth/src/main/java/org/wfc/auth/service/ULoginService.java index 94414c4..737e519 100644 --- a/wfc-auth/src/main/java/org/wfc/auth/service/ULoginService.java +++ b/wfc-auth/src/main/java/org/wfc/auth/service/ULoginService.java @@ -15,9 +15,9 @@ import org.wfc.common.core.utils.StringUtils; import org.wfc.common.core.utils.ip.IpUtils; import org.wfc.common.redis.service.RedisService; import org.wfc.common.security.utils.SecurityUtils; -import org.wfc.system.api.RemoteUserService; -import org.wfc.system.api.domain.SysUser; -import org.wfc.system.api.model.LoginUser; +import org.wfc.common.core.domain.LoginUser; +import org.wfc.user.api.RemoteUUserService; +import org.wfc.user.api.domain.UUser; /** * 用户平台-登录校验方法 @@ -28,13 +28,13 @@ import org.wfc.system.api.model.LoginUser; public class ULoginService { @Autowired - private RemoteUserService remoteUserService; + private RemoteUUserService remoteUserService; @Autowired - private SysPasswordService passwordService; + private UPasswordService passwordService; @Autowired - private SysRecordLogService recordLogService; + private URecordLogService recordLogService; @Autowired private RedisService redisService; @@ -42,7 +42,7 @@ public class ULoginService /** * 登录 */ - public LoginUser login(String username, String password) + public LoginUser login(String username, String password) { // 用户名或密码为空 错误 if (StringUtils.isAnyBlank(username, password)) @@ -72,7 +72,7 @@ public class ULoginService throw new ServiceException("很遗憾,访问IP已被列入系统黑名单"); } // 查询用户信息 - R userResult = remoteUserService.getUserInfo(username, SecurityConstants.INNER); + R> userResult = remoteUserService.getUserInfo(username, SecurityConstants.INNER); if (StringUtils.isNull(userResult) || StringUtils.isNull(userResult.getData())) { @@ -85,8 +85,8 @@ public class ULoginService throw new ServiceException(userResult.getMsg()); } - LoginUser userInfo = userResult.getData(); - SysUser user = userResult.getData().getSysUser(); + LoginUser userInfo = userResult.getData(); + UUser user = userInfo.getUser(); if (UserStatus.DELETED.getCode().equals(user.getDelFlag())) { recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "对不起,您的账号已被删除"); @@ -110,7 +110,7 @@ public class ULoginService */ public void recordLoginInfo(Long userId) { - SysUser sysUser = new SysUser(); + UUser sysUser = new UUser(); sysUser.setUserId(userId); // 更新用户登录IP sysUser.setLoginIp(IpUtils.getIpAddr()); @@ -146,7 +146,7 @@ public class ULoginService } // 注册用户信息 - SysUser sysUser = new SysUser(); + UUser sysUser = new UUser(); sysUser.setUserName(username); sysUser.setNickName(username); sysUser.setPassword(SecurityUtils.encryptPassword(password)); diff --git a/wfc-auth/src/main/java/org/wfc/auth/service/UPasswordService.java b/wfc-auth/src/main/java/org/wfc/auth/service/UPasswordService.java new file mode 100644 index 0000000..452f0db --- /dev/null +++ b/wfc-auth/src/main/java/org/wfc/auth/service/UPasswordService.java @@ -0,0 +1,87 @@ +package org.wfc.auth.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.wfc.common.core.constant.CacheConstants; +import org.wfc.common.core.constant.Constants; +import org.wfc.common.core.exception.ServiceException; +import org.wfc.common.core.exception.user.UserPasswordNotMatchException; +import org.wfc.common.redis.service.RedisService; +import org.wfc.common.security.utils.SecurityUtils; +import org.wfc.user.api.domain.UUser; + +import java.util.concurrent.TimeUnit; + +/** + * 登录密码方法 + * + * @author wfc + */ +@Component +public class UPasswordService +{ + @Autowired + private RedisService redisService; + + private int maxRetryCount = CacheConstants.PASSWORD_MAX_RETRY_COUNT; + + private Long lockTime = CacheConstants.PASSWORD_LOCK_TIME; + + @Autowired + private SysRecordLogService recordLogService; + + /** + * 登录账户密码错误次数缓存键名 + * + * @param username 用户名 + * @return 缓存键key + */ + private String getCacheKey(String username) + { + return CacheConstants.PWD_ERR_CNT_KEY + username; + } + + public void validate(UUser user, String password) + { + String username = user.getUserName(); + + Integer retryCount = redisService.getCacheObject(getCacheKey(username)); + + if (retryCount == null) + { + retryCount = 0; + } + + if (retryCount >= Integer.valueOf(maxRetryCount).intValue()) + { + String errMsg = String.format("密码输入错误%s次,帐户锁定%s分钟", maxRetryCount, lockTime); + recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL,errMsg); + throw new ServiceException(errMsg); + } + + if (!matches(user, password)) + { + retryCount = retryCount + 1; + recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, String.format("密码输入错误%s次", retryCount)); + redisService.setCacheObject(getCacheKey(username), retryCount, lockTime, TimeUnit.MINUTES); + throw new UserPasswordNotMatchException(); + } + else + { + clearLoginRecordCache(username); + } + } + + public boolean matches(UUser user, String rawPassword) + { + return SecurityUtils.matchesPassword(rawPassword, user.getPassword()); + } + + public void clearLoginRecordCache(String loginName) + { + if (redisService.hasKey(getCacheKey(loginName))) + { + redisService.deleteObject(getCacheKey(loginName)); + } + } +} diff --git a/wfc-auth/src/main/java/org/wfc/auth/service/URecordLogService.java b/wfc-auth/src/main/java/org/wfc/auth/service/URecordLogService.java new file mode 100644 index 0000000..8c003a2 --- /dev/null +++ b/wfc-auth/src/main/java/org/wfc/auth/service/URecordLogService.java @@ -0,0 +1,48 @@ +package org.wfc.auth.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.wfc.common.core.constant.Constants; +import org.wfc.common.core.constant.SecurityConstants; +import org.wfc.common.core.utils.StringUtils; +import org.wfc.common.core.utils.ip.IpUtils; +import org.wfc.user.api.RemoteULogService; +import org.wfc.user.api.domain.ULogininfor; + +/** + * 记录日志方法 + * + * @author wfc + */ +@Component +public class URecordLogService +{ + @Autowired + private RemoteULogService remoteLogService; + + /** + * 记录登录信息 + * + * @param username 用户名 + * @param status 状态 + * @param message 消息内容 + * @return + */ + public void recordLogininfor(String username, String status, String message) + { + ULogininfor logininfor = new ULogininfor(); + logininfor.setUserName(username); + logininfor.setIpaddr(IpUtils.getIpAddr()); + logininfor.setMsg(message); + // 日志状态 + if (StringUtils.equalsAny(status, Constants.LOGIN_SUCCESS, Constants.LOGOUT, Constants.REGISTER)) + { + logininfor.setStatus(Constants.LOGIN_SUCCESS_STATUS); + } + else if (Constants.LOGIN_FAIL.equals(status)) + { + logininfor.setStatus(Constants.LOGIN_FAIL_STATUS); + } + remoteLogService.saveLogininfor(logininfor, SecurityConstants.INNER); + } +} diff --git a/wfc-common/wfc-common-core/src/main/java/org/wfc/common/core/constant/ServiceNameConstants.java b/wfc-common/wfc-common-core/src/main/java/org/wfc/common/core/constant/ServiceNameConstants.java index fb6e8a7..ace963e 100644 --- a/wfc-common/wfc-common-core/src/main/java/org/wfc/common/core/constant/ServiceNameConstants.java +++ b/wfc-common/wfc-common-core/src/main/java/org/wfc/common/core/constant/ServiceNameConstants.java @@ -21,4 +21,10 @@ public class ServiceNameConstants * 文件服务的serviceid */ public static final String FILE_SERVICE = "wfc-file"; + + + /** + * 用户平台模块的 service_id + */ + public static final String USER_SERVICE = "wfc-modules-user"; } diff --git a/wfc-api/wfc-api-system/src/main/java/org/wfc/system/api/model/LoginUser.java b/wfc-common/wfc-common-core/src/main/java/org/wfc/common/core/domain/LoginUser.java similarity index 87% rename from wfc-api/wfc-api-system/src/main/java/org/wfc/system/api/model/LoginUser.java rename to wfc-common/wfc-common-core/src/main/java/org/wfc/common/core/domain/LoginUser.java index 651e7d0..7dc6cb6 100644 --- a/wfc-api/wfc-api-system/src/main/java/org/wfc/system/api/model/LoginUser.java +++ b/wfc-common/wfc-common-core/src/main/java/org/wfc/common/core/domain/LoginUser.java @@ -1,15 +1,13 @@ -package org.wfc.system.api.model; - +package org.wfc.common.core.domain; import java.io.Serializable; import java.util.Set; -import org.wfc.system.api.domain.SysUser; /** * 用户信息 * * @author wfc */ -public class LoginUser implements Serializable +public class LoginUser implements Serializable { private static final long serialVersionUID = 1L; @@ -56,7 +54,7 @@ public class LoginUser implements Serializable /** * 用户信息 */ - private SysUser sysUser; + private T user; public String getToken() { @@ -138,13 +136,13 @@ public class LoginUser implements Serializable this.roles = roles; } - public SysUser getSysUser() + public T getUser() { - return sysUser; + return user; } - public void setSysUser(SysUser sysUser) + public void setUser(T user) { - this.sysUser = sysUser; + this.user = user; } } diff --git a/wfc-auth/src/main/java/org/wfc/auth/form/LoginBody.java b/wfc-common/wfc-common-core/src/main/java/org/wfc/common/core/web/form/LoginBody.java similarity index 95% rename from wfc-auth/src/main/java/org/wfc/auth/form/LoginBody.java rename to wfc-common/wfc-common-core/src/main/java/org/wfc/common/core/web/form/LoginBody.java index ce56b6a..6415787 100644 --- a/wfc-auth/src/main/java/org/wfc/auth/form/LoginBody.java +++ b/wfc-common/wfc-common-core/src/main/java/org/wfc/common/core/web/form/LoginBody.java @@ -1,4 +1,4 @@ -package org.wfc.auth.form; +package org.wfc.common.core.web.form; /** * 用户登录对象 diff --git a/wfc-auth/src/main/java/org/wfc/auth/form/RegisterBody.java b/wfc-common/wfc-common-core/src/main/java/org/wfc/common/core/web/form/RegisterBody.java similarity index 72% rename from wfc-auth/src/main/java/org/wfc/auth/form/RegisterBody.java rename to wfc-common/wfc-common-core/src/main/java/org/wfc/common/core/web/form/RegisterBody.java index 7aba435..cfc0a2e 100644 --- a/wfc-auth/src/main/java/org/wfc/auth/form/RegisterBody.java +++ b/wfc-common/wfc-common-core/src/main/java/org/wfc/common/core/web/form/RegisterBody.java @@ -1,4 +1,4 @@ -package org.wfc.auth.form; +package org.wfc.common.core.web.form; /** * 用户注册对象 diff --git a/wfc-common/wfc-common-datascope/src/main/java/org/wfc/common/datascope/aspect/DataScopeAspect.java b/wfc-common/wfc-common-datascope/src/main/java/org/wfc/common/datascope/aspect/DataScopeAspect.java index 8ffdde8..17bc1c8 100644 --- a/wfc-common/wfc-common-datascope/src/main/java/org/wfc/common/datascope/aspect/DataScopeAspect.java +++ b/wfc-common/wfc-common-datascope/src/main/java/org/wfc/common/datascope/aspect/DataScopeAspect.java @@ -8,6 +8,7 @@ import org.aspectj.lang.annotation.Before; import org.springframework.stereotype.Component; import org.wfc.common.core.constant.UserConstants; import org.wfc.common.core.context.SecurityContextHolder; +import org.wfc.common.core.domain.LoginUser; import org.wfc.common.core.text.Convert; import org.wfc.common.core.utils.StringUtils; import org.wfc.common.core.web.domain.BaseEntity; @@ -15,7 +16,6 @@ import org.wfc.common.datascope.annotation.DataScope; import org.wfc.common.security.utils.SecurityUtils; import org.wfc.system.api.domain.SysRole; import org.wfc.system.api.domain.SysUser; -import org.wfc.system.api.model.LoginUser; /** * 数据过滤处理 @@ -66,10 +66,10 @@ public class DataScopeAspect protected void handleDataScope(final JoinPoint joinPoint, DataScope controllerDataScope) { // 获取当前的用户 - LoginUser loginUser = SecurityUtils.getLoginUser(); + LoginUser loginUser = SecurityUtils.getLoginUser(); if (StringUtils.isNotNull(loginUser)) { - SysUser currentUser = loginUser.getSysUser(); + SysUser currentUser = loginUser.getUser(); // 如果是超级管理员,则不过滤数据 if (StringUtils.isNotNull(currentUser) && !currentUser.isAdmin()) { diff --git a/wfc-common/wfc-common-security/pom.xml b/wfc-common/wfc-common-security/pom.xml index 8b60657..84b0d3c 100644 --- a/wfc-common/wfc-common-security/pom.xml +++ b/wfc-common/wfc-common-security/pom.xml @@ -28,12 +28,17 @@ wfc-api-system + + + org.wfc + wfc-api-user + + org.wfc wfc-common-redis - diff --git a/wfc-common/wfc-common-security/src/main/java/org/wfc/common/security/auth/AuthLogic.java b/wfc-common/wfc-common-security/src/main/java/org/wfc/common/security/auth/AuthLogic.java index 6dd2c8d..34e5208 100644 --- a/wfc-common/wfc-common-security/src/main/java/org/wfc/common/security/auth/AuthLogic.java +++ b/wfc-common/wfc-common-security/src/main/java/org/wfc/common/security/auth/AuthLogic.java @@ -16,7 +16,7 @@ import org.wfc.common.security.annotation.RequiresPermissions; import org.wfc.common.security.annotation.RequiresRoles; import org.wfc.common.security.service.TokenService; import org.wfc.common.security.utils.SecurityUtils; -import org.wfc.system.api.model.LoginUser; +import org.wfc.common.core.domain.LoginUser; /** * Token 权限验证,逻辑实现类 @@ -98,7 +98,7 @@ public class AuthLogic * * @param loginUser 当前用户信息 */ - public void verifyLoginUserExpire(LoginUser loginUser) + public void verifyLoginUserExpire(LoginUser loginUser) { tokenService.verifyToken(loginUser); } diff --git a/wfc-common/wfc-common-security/src/main/java/org/wfc/common/security/auth/AuthUtil.java b/wfc-common/wfc-common-security/src/main/java/org/wfc/common/security/auth/AuthUtil.java index 215dce5..ea7c983 100644 --- a/wfc-common/wfc-common-security/src/main/java/org/wfc/common/security/auth/AuthUtil.java +++ b/wfc-common/wfc-common-security/src/main/java/org/wfc/common/security/auth/AuthUtil.java @@ -2,7 +2,7 @@ package org.wfc.common.security.auth; import org.wfc.common.security.annotation.RequiresPermissions; import org.wfc.common.security.annotation.RequiresRoles; -import org.wfc.system.api.model.LoginUser; +import org.wfc.common.core.domain.LoginUser; /** * Token 权限验证工具类 diff --git a/wfc-common/wfc-common-security/src/main/java/org/wfc/common/security/interceptor/HeaderInterceptor.java b/wfc-common/wfc-common-security/src/main/java/org/wfc/common/security/interceptor/HeaderInterceptor.java index 3e99c52..9d636be 100644 --- a/wfc-common/wfc-common-security/src/main/java/org/wfc/common/security/interceptor/HeaderInterceptor.java +++ b/wfc-common/wfc-common-security/src/main/java/org/wfc/common/security/interceptor/HeaderInterceptor.java @@ -10,7 +10,7 @@ import org.wfc.common.core.utils.ServletUtils; import org.wfc.common.core.utils.StringUtils; import org.wfc.common.security.auth.AuthUtil; import org.wfc.common.security.utils.SecurityUtils; -import org.wfc.system.api.model.LoginUser; +import org.wfc.common.core.domain.LoginUser; /** * 自定义请求头拦截器,将Header数据封装到线程变量中方便获取 diff --git a/wfc-common/wfc-common-security/src/main/java/org/wfc/common/security/service/TokenService.java b/wfc-common/wfc-common-security/src/main/java/org/wfc/common/security/service/TokenService.java index f71f1df..0cab5e7 100644 --- a/wfc-common/wfc-common-security/src/main/java/org/wfc/common/security/service/TokenService.java +++ b/wfc-common/wfc-common-security/src/main/java/org/wfc/common/security/service/TokenService.java @@ -17,7 +17,9 @@ import org.wfc.common.core.utils.ip.IpUtils; import org.wfc.common.core.utils.uuid.IdUtils; import org.wfc.common.redis.service.RedisService; import org.wfc.common.security.utils.SecurityUtils; -import org.wfc.system.api.model.LoginUser; +import org.wfc.common.core.domain.LoginUser; +import org.wfc.system.api.domain.SysUser; +import org.wfc.user.api.domain.UUser; /** * token验证处理 @@ -45,11 +47,21 @@ public class TokenService /** * 创建令牌 */ - public Map createToken(LoginUser loginUser) + public Map createToken(LoginUser loginUser) { String token = IdUtils.fastUUID(); - Long userId = loginUser.getSysUser().getUserId(); - String userName = loginUser.getSysUser().getUserName(); + Long userId = 0L; + String userName = ""; + T user = loginUser.getUser(); + if (user instanceof SysUser) { + SysUser sysUser = (SysUser) user; + userId = sysUser.getUserId(); + userName = sysUser.getUserName(); + }else if (user instanceof UUser) { + UUser uUser = (UUser) user; + userId = uUser.getUserId(); + userName = uUser.getUserName(); + } loginUser.setToken(token); loginUser.setUserid(userId); loginUser.setUsername(userName); @@ -74,7 +86,7 @@ public class TokenService * * @return 用户信息 */ - public LoginUser getLoginUser() + public LoginUser getLoginUser() { return getLoginUser(ServletUtils.getRequest()); } @@ -84,7 +96,7 @@ public class TokenService * * @return 用户信息 */ - public LoginUser getLoginUser(HttpServletRequest request) + public LoginUser getLoginUser(HttpServletRequest request) { // 获取请求携带的令牌 String token = SecurityUtils.getToken(request); @@ -96,9 +108,9 @@ public class TokenService * * @return 用户信息 */ - public LoginUser getLoginUser(String token) + public LoginUser getLoginUser(String token) { - LoginUser user = null; + LoginUser user = null; try { if (StringUtils.isNotEmpty(token)) @@ -118,7 +130,7 @@ public class TokenService /** * 设置用户身份信息 */ - public void setLoginUser(LoginUser loginUser) + public void setLoginUser(LoginUser loginUser) { if (StringUtils.isNotNull(loginUser) && StringUtils.isNotEmpty(loginUser.getToken())) { @@ -141,9 +153,9 @@ public class TokenService /** * 验证令牌有效期,相差不足120分钟,自动刷新缓存 * - * @param loginUser + * @param loginUser 登录用户 */ - public void verifyToken(LoginUser loginUser) + public void verifyToken(LoginUser loginUser) { long expireTime = loginUser.getExpireTime(); long currentTime = System.currentTimeMillis(); @@ -158,7 +170,7 @@ public class TokenService * * @param loginUser 登录信息 */ - public void refreshToken(LoginUser loginUser) + public void refreshToken(LoginUser loginUser) { loginUser.setLoginTime(System.currentTimeMillis()); loginUser.setExpireTime(loginUser.getLoginTime() + expireTime * MILLIS_MINUTE); diff --git a/wfc-common/wfc-common-security/src/main/java/org/wfc/common/security/utils/DictUtils.java b/wfc-common/wfc-common-security/src/main/java/org/wfc/common/security/utils/DictUtils.java index 023c3a7..3c62994 100644 --- a/wfc-common/wfc-common-security/src/main/java/org/wfc/common/security/utils/DictUtils.java +++ b/wfc-common/wfc-common-security/src/main/java/org/wfc/common/security/utils/DictUtils.java @@ -22,7 +22,7 @@ public class DictUtils * @param key 参数键 * @param dictDatas 字典数据列表 */ - public static void setDictCache(String key, List dictDatas) + public static void setDictCache(String key, List dictDatas) { SpringUtils.getBean(RedisService.class).setCacheObject(getCacheKey(key), dictDatas); } @@ -33,12 +33,12 @@ public class DictUtils * @param key 参数键 * @return dictDatas 字典数据列表 */ - public static List getDictCache(String key) + public static List getDictCache(String key, Class clazz) { JSONArray arrayCache = SpringUtils.getBean(RedisService.class).getCacheObject(getCacheKey(key)); if (StringUtils.isNotNull(arrayCache)) { - return arrayCache.toList(SysDictData.class); + return arrayCache.toList(clazz); } return null; } diff --git a/wfc-common/wfc-common-security/src/main/java/org/wfc/common/security/utils/SecurityUtils.java b/wfc-common/wfc-common-security/src/main/java/org/wfc/common/security/utils/SecurityUtils.java index f438e07..4eb3030 100644 --- a/wfc-common/wfc-common-security/src/main/java/org/wfc/common/security/utils/SecurityUtils.java +++ b/wfc-common/wfc-common-security/src/main/java/org/wfc/common/security/utils/SecurityUtils.java @@ -7,7 +7,7 @@ import org.wfc.common.core.constant.TokenConstants; import org.wfc.common.core.context.SecurityContextHolder; import org.wfc.common.core.utils.ServletUtils; import org.wfc.common.core.utils.StringUtils; -import org.wfc.system.api.model.LoginUser; +import org.wfc.common.core.domain.LoginUser; /** * 权限获取工具类 @@ -43,7 +43,7 @@ public class SecurityUtils /** * 获取登录用户信息 */ - public static LoginUser getLoginUser() + public static LoginUser getLoginUser() { return SecurityContextHolder.get(SecurityConstants.LOGIN_USER, LoginUser.class); } diff --git a/wfc-modules/wfc-system/src/main/java/org/wfc/system/controller/SysProfileController.java b/wfc-modules/wfc-system/src/main/java/org/wfc/system/controller/SysProfileController.java index 2888f96..5b27b3c 100644 --- a/wfc-modules/wfc-system/src/main/java/org/wfc/system/controller/SysProfileController.java +++ b/wfc-modules/wfc-system/src/main/java/org/wfc/system/controller/SysProfileController.java @@ -10,6 +10,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; +import org.wfc.common.core.domain.LoginUser; import org.wfc.common.core.domain.R; import org.wfc.common.core.utils.StringUtils; import org.wfc.common.core.utils.file.FileTypeUtils; @@ -23,7 +24,6 @@ import org.wfc.common.security.utils.SecurityUtils; import org.wfc.system.api.RemoteFileService; import org.wfc.system.api.domain.SysFile; import org.wfc.system.api.domain.SysUser; -import org.wfc.system.api.model.LoginUser; import org.wfc.system.service.ISysUserService; /** @@ -65,8 +65,8 @@ public class SysProfileController extends BaseController @PutMapping public AjaxResult updateProfile(@RequestBody SysUser user) { - LoginUser loginUser = SecurityUtils.getLoginUser(); - SysUser currentUser = loginUser.getSysUser(); + LoginUser loginUser = SecurityUtils.getLoginUser(); + SysUser currentUser = loginUser.getUser(); currentUser.setNickName(user.getNickName()); currentUser.setEmail(user.getEmail()); currentUser.setPhonenumber(user.getPhonenumber()); @@ -110,8 +110,10 @@ public class SysProfileController extends BaseController if (userService.resetUserPwd(username, newPassword) > 0) { // 更新缓存用户密码 - LoginUser loginUser = SecurityUtils.getLoginUser(); - loginUser.getSysUser().setPassword(newPassword); + LoginUser loginUser = SecurityUtils.getLoginUser(); + SysUser sysUser = loginUser.getUser(); + sysUser.setPassword(newPassword); + loginUser.setUser(sysUser); tokenService.setLoginUser(loginUser); return success(); } @@ -127,7 +129,7 @@ public class SysProfileController extends BaseController { if (!file.isEmpty()) { - LoginUser loginUser = SecurityUtils.getLoginUser(); + LoginUser loginUser = SecurityUtils.getLoginUser(); String extension = FileTypeUtils.getExtension(file); if (!StringUtils.equalsAnyIgnoreCase(extension, MimeTypeUtils.IMAGE_EXTENSION)) { @@ -144,7 +146,9 @@ public class SysProfileController extends BaseController AjaxResult ajax = AjaxResult.success(); ajax.put("imgUrl", url); // 更新缓存用户头像 - loginUser.getSysUser().setAvatar(url); + SysUser sysUser = loginUser.getUser(); + sysUser.setAvatar(url); + loginUser.setUser(sysUser); tokenService.setLoginUser(loginUser); return ajax; } diff --git a/wfc-modules/wfc-system/src/main/java/org/wfc/system/controller/SysUserController.java b/wfc-modules/wfc-system/src/main/java/org/wfc/system/controller/SysUserController.java index 414ff85..3af516d 100644 --- a/wfc-modules/wfc-system/src/main/java/org/wfc/system/controller/SysUserController.java +++ b/wfc-modules/wfc-system/src/main/java/org/wfc/system/controller/SysUserController.java @@ -29,7 +29,7 @@ import org.wfc.common.security.utils.SecurityUtils; import org.wfc.system.api.domain.SysDept; import org.wfc.system.api.domain.SysRole; import org.wfc.system.api.domain.SysUser; -import org.wfc.system.api.model.LoginUser; +import org.wfc.common.core.domain.LoginUser; import org.wfc.system.service.ISysConfigService; import org.wfc.system.service.ISysDeptService; import org.wfc.system.service.ISysPermissionService; @@ -133,7 +133,7 @@ public class SysUserController extends BaseController */ @InnerAuth @GetMapping("/info/{username}") - public R info(@PathVariable("username") String username) + public R> info(@PathVariable("username") String username) { SysUser sysUser = userService.selectUserByUserName(username); if (StringUtils.isNull(sysUser)) @@ -144,8 +144,8 @@ public class SysUserController extends BaseController Set roles = permissionService.getRolePermission(sysUser); // 权限集合 Set permissions = permissionService.getMenuPermission(sysUser); - LoginUser sysUserVo = new LoginUser(); - sysUserVo.setSysUser(sysUser); + LoginUser sysUserVo = new LoginUser(); + sysUserVo.setUser(sysUser); sysUserVo.setRoles(roles); sysUserVo.setPermissions(permissions); return R.ok(sysUserVo); @@ -188,8 +188,8 @@ public class SysUserController extends BaseController @GetMapping("getInfo") public AjaxResult getInfo() { - LoginUser loginUser = SecurityUtils.getLoginUser(); - SysUser user = loginUser.getSysUser(); + LoginUser loginUser = SecurityUtils.getLoginUser(); + SysUser user = loginUser.getUser(); // 角色集合 Set roles = permissionService.getRolePermission(user); // 权限集合 diff --git a/wfc-modules/wfc-system/src/main/java/org/wfc/system/controller/SysUserOnlineController.java b/wfc-modules/wfc-system/src/main/java/org/wfc/system/controller/SysUserOnlineController.java index e0912f6..45293c9 100644 --- a/wfc-modules/wfc-system/src/main/java/org/wfc/system/controller/SysUserOnlineController.java +++ b/wfc-modules/wfc-system/src/main/java/org/wfc/system/controller/SysUserOnlineController.java @@ -19,7 +19,7 @@ import org.wfc.common.log.annotation.Log; import org.wfc.common.log.enums.BusinessType; import org.wfc.common.redis.service.RedisService; import org.wfc.common.security.annotation.RequiresPermissions; -import org.wfc.system.api.model.LoginUser; +import org.wfc.common.core.domain.LoginUser; import org.wfc.system.domain.SysUserOnline; import org.wfc.system.service.ISysUserOnlineService; diff --git a/wfc-modules/wfc-system/src/main/java/org/wfc/system/service/ISysUserOnlineService.java b/wfc-modules/wfc-system/src/main/java/org/wfc/system/service/ISysUserOnlineService.java index a8b8780..f32b208 100644 --- a/wfc-modules/wfc-system/src/main/java/org/wfc/system/service/ISysUserOnlineService.java +++ b/wfc-modules/wfc-system/src/main/java/org/wfc/system/service/ISysUserOnlineService.java @@ -1,6 +1,6 @@ package org.wfc.system.service; -import org.wfc.system.api.model.LoginUser; +import org.wfc.common.core.domain.LoginUser; import org.wfc.system.domain.SysUserOnline; /** diff --git a/wfc-modules/wfc-system/src/main/java/org/wfc/system/service/impl/SysDictTypeServiceImpl.java b/wfc-modules/wfc-system/src/main/java/org/wfc/system/service/impl/SysDictTypeServiceImpl.java index 50fb50f..d40c64a 100644 --- a/wfc-modules/wfc-system/src/main/java/org/wfc/system/service/impl/SysDictTypeServiceImpl.java +++ b/wfc-modules/wfc-system/src/main/java/org/wfc/system/service/impl/SysDictTypeServiceImpl.java @@ -73,7 +73,7 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService @Override public List selectDictDataByType(String dictType) { - List dictDatas = DictUtils.getDictCache(dictType); + List dictDatas = DictUtils.getDictCache(dictType, SysDictData.class); if (StringUtils.isNotEmpty(dictDatas)) { return dictDatas; diff --git a/wfc-modules/wfc-system/src/main/java/org/wfc/system/service/impl/SysUserOnlineServiceImpl.java b/wfc-modules/wfc-system/src/main/java/org/wfc/system/service/impl/SysUserOnlineServiceImpl.java index 8b4bdde..30fe0a2 100644 --- a/wfc-modules/wfc-system/src/main/java/org/wfc/system/service/impl/SysUserOnlineServiceImpl.java +++ b/wfc-modules/wfc-system/src/main/java/org/wfc/system/service/impl/SysUserOnlineServiceImpl.java @@ -2,7 +2,7 @@ package org.wfc.system.service.impl; import org.springframework.stereotype.Service; import org.wfc.common.core.utils.StringUtils; -import org.wfc.system.api.model.LoginUser; +import org.wfc.common.core.domain.LoginUser; import org.wfc.system.domain.SysUserOnline; import org.wfc.system.service.ISysUserOnlineService;