From bd44024c2974f2537635b1f94206afccbc0b1470 Mon Sep 17 00:00:00 2001 From: FatttSnake Date: Tue, 23 May 2023 02:29:36 +0800 Subject: [PATCH] Fixed token to large error --- .../pinnacle/controller/UserController.java | 6 ++++ .../cfive/pinnacle/service/IUserService.java | 2 ++ .../service/impl/UserServiceImpl.java | 6 ++++ .../permission/impl/LoginServiceImpl.java | 10 +----- ui/src/pages/Main.vue | 6 ++-- ui/src/router/index.ts | 4 +-- ui/src/utils/auth.ts | 34 +++++++++++-------- 7 files changed, 40 insertions(+), 28 deletions(-) diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/controller/UserController.java b/Pinnacle/src/main/java/com/cfive/pinnacle/controller/UserController.java index 27551de..17d3ee5 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/controller/UserController.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/controller/UserController.java @@ -33,6 +33,12 @@ public class UserController { this.userService = userService; } + @GetMapping("/info") + @Operation(summary = "获取当前用户信息") + public ResponseResult getInfo() { + return ResponseResult.databaseSelectSuccess(userService.getInfo()); + } + @GetMapping @PreAuthorize("hasAnyAuthority('system:user:all', 'system:user:add', 'system:user:modify')") @Operation(summary = "获取所有用户(权限管理相关)") diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/service/IUserService.java b/Pinnacle/src/main/java/com/cfive/pinnacle/service/IUserService.java index be9aac9..c6a176d 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/service/IUserService.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/service/IUserService.java @@ -15,6 +15,8 @@ import java.util.List; */ public interface IUserService extends IService { + User getInfo(); + List getAllUser(); User getUser(long id); diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/service/impl/UserServiceImpl.java b/Pinnacle/src/main/java/com/cfive/pinnacle/service/impl/UserServiceImpl.java index a56d207..a4df008 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/service/impl/UserServiceImpl.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/service/impl/UserServiceImpl.java @@ -11,6 +11,7 @@ import com.cfive.pinnacle.mapper.permission.MenuMapper; import com.cfive.pinnacle.mapper.permission.OperationMapper; import com.cfive.pinnacle.service.IUserService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.cfive.pinnacle.utils.WebUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; @@ -72,6 +73,11 @@ public class UserServiceImpl extends ServiceImpl implements IU this.passwordEncoder = passwordEncoder; } + @Override + public User getInfo() { + return WebUtil.getLoginUser().getUser(); + } + @Override public List getAllUser() { List users = userMapper.getAll(); diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/service/permission/impl/LoginServiceImpl.java b/Pinnacle/src/main/java/com/cfive/pinnacle/service/permission/impl/LoginServiceImpl.java index 946bf8b..a080400 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/service/permission/impl/LoginServiceImpl.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/service/permission/impl/LoginServiceImpl.java @@ -5,8 +5,6 @@ import com.cfive.pinnacle.entity.permission.LoginUser; import com.cfive.pinnacle.service.permission.ILoginService; import com.cfive.pinnacle.utils.JwtUtil; import com.cfive.pinnacle.utils.RedisCache; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; @@ -43,13 +41,7 @@ public class LoginServiceImpl implements ILoginService { LoginUser loginUser = (LoginUser) authentication.getPrincipal(); loginUser.getUser().setPasswd(""); String userId = loginUser.getUser().getId().toString(); - String jwt; - try { - jwt = JwtUtil.createJWT(new ObjectMapper().writeValueAsString(loginUser.getUser())); - } catch (JsonProcessingException e) { - jwt = JwtUtil.createJWT(userId); - } - + String jwt = JwtUtil.createJWT(userId); HashMap hashMap = new HashMap<>(); hashMap.put("token", jwt); diff --git a/ui/src/pages/Main.vue b/ui/src/pages/Main.vue index 5ace04d..fef5d16 100644 --- a/ui/src/pages/Main.vue +++ b/ui/src/pages/Main.vue @@ -223,13 +223,13 @@ export default { setLocalStorage('menuCollapsed', this.isCollapsed.toString()) } }, - mounted() { - this.username = getUsername() + async mounted() { + this.username = await getUsername() const allRoutes = _.cloneDeep( _.filter(_.get(this.$router, 'options.routes[0].children'), 'meta.title') ) - const user = getUser() + const user = await getUser() const menus = user.menus this.routes = allRoutes.filter((level1) => { if (level1.meta.requiresAuth) { diff --git a/ui/src/router/index.ts b/ui/src/router/index.ts index cd7643a..0307d12 100644 --- a/ui/src/router/index.ts +++ b/ui/src/router/index.ts @@ -50,7 +50,7 @@ const router = createRouter({ ] }) -router.beforeEach((to, from, next) => { +router.beforeEach(async (to, from, next) => { if (to.matched.length === 0) { from.path !== '' ? next({ path: from.path }) : next('/') } else { @@ -64,7 +64,7 @@ router.beforeEach((to, from, next) => { next('/') } else { if (to.meta.requiresAuth === true) { - const user = getUser() + const user = await getUser() const menus = user.menus for (const menu of menus) { if (menu.url === '/') continue diff --git a/ui/src/utils/auth.ts b/ui/src/utils/auth.ts index c509645..8a24b17 100644 --- a/ui/src/utils/auth.ts +++ b/ui/src/utils/auth.ts @@ -1,8 +1,7 @@ import type { Captcha } from './common' -import { clearLocalStorage, getCaptcha, getLocalStorage, getToken } from './common' -import { TOKEN_NAME } from '@/constants/Common.constants' +import { clearLocalStorage, getCaptcha, getLocalStorage, setLocalStorage } from './common' +import { DATABASE_SELECT_OK, TOKEN_NAME } from '@/constants/Common.constants' import request from '@/services' -import jwtDecode, { type JwtPayload } from 'jwt-decode' import _ from 'lodash' let captcha: Captcha @@ -21,20 +20,27 @@ function getLoginStatus(): boolean { return getLocalStorage(TOKEN_NAME) != null } -function getUser(): any { - const token = getToken() - - if (token === null) { - logout() - return '' +async function getUser(): Promise { + if (getLocalStorage('userInfo') !== null) { + return JSON.parse(getLocalStorage('userInfo') as string) } - - const jwtPayload: JwtPayload = jwtDecode(token) - return JSON.parse(jwtPayload.sub ?? '') + return await requestUser() } -function getUsername(): string { - const user = getUser() +async function requestUser(): Promise { + let user + await request.get('/user/info').then((res) => { + const response = res.data + if (response.code === DATABASE_SELECT_OK) { + user = response.data + setLocalStorage('userInfo', JSON.stringify(user)) + } + }) + return user +} + +async function getUsername(): Promise { + const user = await getUser() return user.staff != null ? `${_.toString(user.staff.lastName)}${_.toString(user.staff.firstName)}`