diff --git a/kernel-d-auth/auth-api/src/main/java/cn/stylefeng/roses/kernel/auth/api/SessionManagerApi.java b/kernel-d-auth/auth-api/src/main/java/cn/stylefeng/roses/kernel/auth/api/SessionManagerApi.java index 263433db3..2d260edbe 100644 --- a/kernel-d-auth/auth-api/src/main/java/cn/stylefeng/roses/kernel/auth/api/SessionManagerApi.java +++ b/kernel-d-auth/auth-api/src/main/java/cn/stylefeng/roses/kernel/auth/api/SessionManagerApi.java @@ -26,6 +26,16 @@ public interface SessionManagerApi { */ void createSession(String token, LoginUser loginUser); + /** + * 更新当前会话的loginUser对象的内容 + * + * @param token 用户的当前token + * @param loginUser 新的登录用户信息 + * @author fengshuonan + * @date 2021/1/9 10:43 + */ + void updateSession(String token, LoginUser loginUser); + /** * 通过token获取会话 * diff --git a/kernel-d-auth/auth-sdk/src/main/java/cn/stylefeng/roses/kernel/auth/session/DefaultSessionManager.java b/kernel-d-auth/auth-sdk/src/main/java/cn/stylefeng/roses/kernel/auth/session/DefaultSessionManager.java index 39675bb4a..1ffe31794 100644 --- a/kernel-d-auth/auth-sdk/src/main/java/cn/stylefeng/roses/kernel/auth/session/DefaultSessionManager.java +++ b/kernel-d-auth/auth-sdk/src/main/java/cn/stylefeng/roses/kernel/auth/session/DefaultSessionManager.java @@ -11,7 +11,6 @@ import cn.stylefeng.roses.kernel.rule.util.HttpServletUtil; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; -import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -86,6 +85,18 @@ public class DefaultSessionManager implements SessionManagerApi { } + @Override + public void updateSession(String token, LoginUser loginUser) { + LoginUser session = this.getSession(token); + + // 该用户session为空不能更新 + if (session == null) { + return; + } + + loginUserCache.put(token, loginUser, sessionExpiredSeconds); + } + @Override public LoginUser getSession(String token) { return loginUserCache.get(token); @@ -173,4 +184,5 @@ public class DefaultSessionManager implements SessionManagerApi { public List onlineUserList() { return new ArrayList<>(loginUserCache.getAllValues()); } + } diff --git a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/pojo/request/SysUserRequest.java b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/pojo/request/SysUserRequest.java index c347ed54e..35d3f6b93 100644 --- a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/pojo/request/SysUserRequest.java +++ b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/pojo/request/SysUserRequest.java @@ -26,7 +26,7 @@ public class SysUserRequest extends BaseRequest { /** * 主键 */ - @NotNull(message = "userId不能为空", groups = {edit.class, delete.class, detail.class, grantRole.class, grantData.class, updateInfo.class, resetPwd.class, changeStatus.class, updateAvatar.class}) + @NotNull(message = "userId不能为空", groups = {edit.class, delete.class, detail.class, grantRole.class, grantData.class, updateInfo.class, resetPwd.class, changeStatus.class}) private Long userId; /** diff --git a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/service/impl/SysUserServiceImpl.java b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/service/impl/SysUserServiceImpl.java index cfa796066..1c97fedc6 100644 --- a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/service/impl/SysUserServiceImpl.java +++ b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/service/impl/SysUserServiceImpl.java @@ -7,6 +7,7 @@ import cn.stylefeng.roses.kernel.auth.api.context.LoginContext; import cn.stylefeng.roses.kernel.auth.api.expander.AuthConfigExpander; import cn.stylefeng.roses.kernel.auth.api.password.PasswordStoredEncryptApi; import cn.stylefeng.roses.kernel.auth.api.pojo.login.LoginUser; +import cn.stylefeng.roses.kernel.auth.api.pojo.login.basic.SimpleUserInfo; import cn.stylefeng.roses.kernel.db.api.factory.PageFactory; import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory; import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; @@ -216,9 +217,23 @@ public class SysUserServiceImpl extends ServiceImpl impl @Override public void updateAvatar(SysUserRequest sysUserRequest) { + + // 新头像文件id + Long fileId = sysUserRequest.getAvatar(); + + // 从当前用户获取用户id + LoginUser loginUser = LoginContext.me().getLoginUser(); + sysUserRequest.setUserId(loginUser.getUserId()); + + // 更新用户头像 SysUser sysUser = this.querySysUser(sysUserRequest); - sysUser.setAvatar(sysUserRequest.getAvatar()); + sysUser.setAvatar(fileId); this.updateById(sysUser); + + // 更新当前用户的session信息 + SimpleUserInfo simpleUserInfo = loginUser.getSimpleUserInfo(); + simpleUserInfo.setAvatar(fileId); + sessionManagerApi.updateSession(LoginContext.me().getToken(), loginUser); } @Override