package com.mowencong.controller;
import com.mowencong.config.redis.RedisService;
import com.mowencong.entity.Permission;
import com.mowencong.entity.User;
import com.mowencong.entity.UserInfo;
import com.mowencong.utils.JwtUtils;
import com.mowencong.utils.MenuTree;
import com.mowencong.utils.Result;
import com.mowencong.vo.RouterVo;
import com.mowencong.vo.TokenVo;
import io.jsonwebtoken.Jwts;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@RestController
@RequestMapping("/api/sysUser")
public class SysUserController {
@Resource
private RedisService redisService;
@Resource
private JwtUtils jwtUtils;
/**
* 刷新token
*
* @param request
* @return
*/
@PostMapping("/refreshToken")
public Result refreshToken(HttpServletRequest request) {
//从header中获取前端提交的token
String token = request.getHeader("token");
//如果header中没有token,则从参数中获取
if (ObjectUtils.isEmpty(token)) {
token = request.getParameter("token");
}
//从Spring Security上下文获取用户信息
Authentication authentication =
SecurityContextHolder.getContext().getAuthentication();
//获取身份信息
UserDetails details = (UserDetails) authentication.getPrincipal();
//重新生成token
String reToken = "";
//验证原来的token是否合法
if (jwtUtils.validateToken(token, details)) {
//生成新的token
reToken = jwtUtils.refreshToken(token);
}
//获取本次token的到期时间,交给前端做判断
long expireTime = Jwts.parser().setSigningKey(jwtUtils.getSecret())
.parseClaimsJws(reToken.replace("jwt_", ""))
.getBody().getExpiration().getTime();
//清除原来的token信息
String oldTokenKey = "token_" + token;
redisService.del(oldTokenKey);
//存储新的token
String newTokenKey = "token_" + reToken;
redisService.set(newTokenKey, reToken, jwtUtils.getExpiration() / 1000);
//创建TokenVo对象
TokenVo tokenVo = new TokenVo(expireTime, reToken);
//返回数据
return Result.ok(tokenVo).message("token生成成功");
}
/**
* 获取用户信息
*
* @return
*/
@GetMapping("/getInfo")
public Result getInfo() {
//从Spring Security上下文获取用户信息
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
//判断authentication对象是否为空
if (authentication == null) {
return Result.error().message("用户信息查询失败");
}
//获取用户信息
User user = (User) authentication.getPrincipal();
//用户权限集合
List<Permission> permissionList = user.getPermissionList();
//获取角色权限编码字段
Object[] roles = permissionList.stream()
.filter(Objects::nonNull)
.map(Permission::getCode).toArray();
//创建用户信息对象
UserInfo userInfo = new UserInfo(user.getId(), user.getNickName(),
user.getAvatar(), null, roles);
//返回数据
return Result.ok(userInfo).message("用户信息查询成功");
}
/**
* 获取菜单数据
*
* @return
*/
@GetMapping("/getMenuList")
public Result getMenuList() {
System.out.println("jinlai"+SecurityContextHolder.getContext().getAuthentication());
//从Spring Security上下文获取用户信息
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
//获取用户信息
User user = (User) authentication.getPrincipal();
//获取相应的权限
List<Permission> permissionList = user.getPermissionList();
//筛选目录和菜单
List<Permission> collect = permissionList.stream()
.filter(item -> item != null && item.getType() != 2)
.collect(Collectors.toList());
//生成路由数据
List<RouterVo> routerVoList = MenuTree.makeRouter(collect, 0L);
//返回数据
return Result.ok(routerVoList).message("菜单数据获取成功");
}
@PostMapping("/logout")
public Result logout(HttpServletRequest request, HttpServletResponse response){
//获取token
String token = request.getParameter("token");
//如果没有在从参数里面获取到,那么从头部获取token
if(ObjectUtils.isEmpty(token)){
token = request.getHeader("token");
}
//获取用户相关信息
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if(authentication != null){
//清空用户信息
new SecurityContextLogoutHandler().logout(request,response,authentication);
//清空redis里面的token
String key = "token_" + token;
redisService.del(key);
}
return Result.ok().message("用户退出成功");
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
通用权限管理系统可练手可毕设,如果项目中有权限开发要求可直接拿来基础开发。 系统设计包括前端Vue框架和后端SpringBoot框架的搭建,以及数据库和权限控制模块的设计。前端使用Vue框架进行页面开发,利用Vue Router实现路由管理和权限控制。后端使用SpringBoot框架进行业务逻辑开发,利用Spring Security实现权限控制。数据库采用MySQL进行数据存储,使用MyBatis进行数据访问。 权限控制模块设计包括用户、角色和权限三个主要模块。用户模块用于管理用户信息,角色模块用于管理角色信息,权限模块用于管理权限信息。实现对用户访问资源的控制,可以通过将权限与角色进行关联。 系统实现主要包括用户登录、权限验证、角色管理、权限管理、资源管理等功能。当用户尝试登录时,系统会通过核实其用户名和密码来确认其身份。权限验证时,根据用户的角色和权限信息,系统评估用户是否具备访问该资源的权利。角色管理、权限管理和资源管理等功能,通过对应的模块实现。 总的来说,基于SpringBoot+Vue的通用权限控制系统设计与实现,可以提供灵活、可扩展、易维护的权限控制功能,适用于各种应用
资源推荐
资源详情
资源评论
收起资源包目录
通用权限管理系统+springboot+mybatis plus+spring security+jwt+redis+mysql (457个子文件)
008ee6a3b3919d15e64c53ef9ba95ceb3173a7 454B
00b4e6f72a98d80d7439b5a825cd849bf59a4d 99B
018a6a8c69b4bf33df0770704eb752172ee25a 217B
03f300b3a1efc9e8ee2512629e46465cc64476 86B
04e1781b0ef3cee10469e0013d17ebf837aeab 225B
0530138b37e7db32436373d556ad2d51db0ec0 2KB
05bae49bfd811c35216309c47e01330881dddd 647B
06116a1161417f30d777f2270f12bd2396c66f 218B
08b2b59529cf80a0d6b396bf41109433ec5e83 79B
08bf42bde6e2a98c81f2ff61d073734e2b3bf0 160B
08d61d56a010ab4511e49477033178fcae4b70 1000B
09051d64d4ed95fdc75eca87ed42c2d811f1ba 215B
0985ac3647831ffbd28f74fd5a88af6b5d44d2 74B
09bf3321339de4c80ee74bc740804d7de9f3c2 715B
0cb33f1a66e08b3bd9546892f8901927f02caa 161B
0d1eb17bca667b7e669034e314ca2bbf7bb181 210B
0d28bdf910f0eb1038f08ec28338f154297296 190B
0d429412640eec1d690a7b1926a2d5337e4b8c 1KB
0e5b1d4b1fa51630599a806c2630f4ab4b56b7 401B
0e932f94de95be219295e770a0267a11cb7f54 253B
0fde2da89e2bb0d3a7fbad917f51ce673685aa 115B
0ff70876abce4a7c90861fe26acd64a2655fd9 50B
10560ed1eb9a66a3f6ac4a349892cdf25ba1c5 1KB
157b58aefef4600a93f776cc86734d51a39ebf 216B
15f10da0a9267cdfa9accf589e379361ea8ddf 164B
16307891e8fe546db8a0aa5bf41caa588af773 76B
1634bfcdce4b5d010b902cb61ac85f9ef9acd3 66B
180ca410476c8d89f1d83119d0557c78824428 98B
1867fe6346481c111c830a365bd86fa6367835 176B
1abc869dae24a2c2d054915343465b941fb9d4 75B
1ace0ad150e44e4c46a25780aeab94e1638734 78B
1b4a559109f9755285cd22b4143586b52d4dc3 998B
1c3ea72dea1cc8df94b72c4b34894f01ded9db 98B
1d9db57419ff1b6fed774ce3fcc2b45bbb47b4 171B
1f98a96ed943946952b5e633f929f5d5525383 213B
1f9afde4cabb16890a850ad47571fc68b1e21a 192B
1fdd45a5acd4a6393bd779874defbb1901b1ea 49B
1fe8d4847c85541ad7ad872c2222dd1e04c780 47B
1fed3eafcc141a6aec5b3385752da8f9efaa28 1003B
20241e902191d2c4fb36602af9de827bd2ec6d 160B
210f66bb00321dbfe30de4320930e6d8158c18 70B
2112958742a2e65429f25a3681343a60cf2915 161B
220e704acb227a0f6aafd662487c4953707fd4 52B
2312c42ec73acec42739f03d34ca339b7a50c5 51B
23ade5bbba0ee1d0ca69264afe5f3566a4f586 1KB
23dae2948bab44ee567b975f92cd95d9ed5eff 165B
24d8e2f823e41bd5eecf186332bd6349adfae3 73B
2502c879adf9c4a50e04c29766e7284090084d 52B
26d8e6ad1c6e0cbb2b6da494401810dd655eeb 342B
26e4257f2cd2aea99a6b2b1fb5c42d6fb4c111 166B
271106e159ea86bd58a95b759b3dd2f3de8f22 226B
281d76b32826710aec57e9085af54b4d61c7a8 80B
289fed67d4856e5f04eda853917292bf1720c2 154B
28cd6959a422d19d09d8ec80ef3c4764ff7a2d 2KB
2a82163afa9bd5951203f46500df52cf1a90e4 220B
2a8634371cb4628a01ebffc0cf47d53bfa214c 330B
2ab9d985c20018a0c97b93d2148ac1ffe588a5 300B
2bfbeaac0afa771c4ba22d78b237e469c602c2 2KB
2c91ca9bc1817ae97b26b5b1baa07d7f7af4bf 255B
2d53ee4d9d13e026197b35dd7d758f785d3e5f 1KB
2d8652f1e2dc4882010ed0ed18e26c9f357973 98B
2d89f25adaaa59dfd25b7764c165e36e5fdf79 733B
2df287dd7c88721f4510ab77c0bf64e50cf5f6 221B
2dfa47713fc1851c1fd99304b2bc7821842b22 990B
2ff3efb5b5a3a09563405f93d6c9a1bbd29a29 164B
30685a6c5b71c20d7bad8874be51d38ce36bec 126B
312e0fff5436070f454724d422071682b7383f 182B
3144e86c814db1f22ae214eb1324f75a394b0a 762B
3173658e7fd74af6a9dd8331d1e382b1d51fec 431B
3202af128793bcde1af62dba9278ea288de189 126B
334a594e908549e4f7a1adbd5a48a1cadc0b67 71B
35f12560631f27f8d8ff993fb6222c32c67d64 116B
3730bfb8f04d5d41363e4f2c4b80a5be8e8765 162B
38be1ef7991059750c7d82c5d416c2a042faa5 469B
38e57f8e4cb3069639ce37a1610c538fd2e086 498B
396f6afebc9228af3ab5adbecfa0847ae3b24d 2KB
3a9b81e9dea20391889ce4e478722ef9d866dc 2KB
3accf50ffd109a364ccb04732f075c79651238 159B
3c9847684bab81762d4d5bb3687ab2e07a22a6 316B
3d8468daec1fd1b368ad6a02f73525bddb1ec6 736B
3e7c2fe74f634128759823defb9caa9a39b7a3 498B
3ec85547236127d453dcb9e8195f4fc0deeb32 2KB
3f45e913d37460b1d35fda06b13762a502f5aa 86B
3f460865bb0828d113a25b450253dfa4829d77 194B
405421f223c6037259c0857859eda0929c08af 155B
40a556292d4f30fc0b30418a79ca8a08ef870f 51B
419e3b7267f02e208d731f9387b1808a9b3ba2 710B
41d3f64727faa474cde79750df8ccac13dcca5 222B
41fbb1f1812148f63bc9b0add31e70c088e9e2 172B
48163d471a6e355bbaa0225b523421045ac666 51B
4817ccb76b6bb32cb19d32b67278a30a3a2bb2 406B
48228c23b1c7b88a4b5df5334e84ecbac9c92d 247B
4908d5bfe421855d356869d849ec3501c7f2ac 64B
49c0ef41bc597ff13452b8ed1fb56376442cd6 47B
49de38fcc93778b841936ce634a362272931f2 243B
4c1f455aa44f1d7351ce50f0bc4765cb58002b 437B
4cf762d6a28761af3a7824ae0fb7df44d84955 413B
4dd044a6b91463e0843e3b20dd5b255ef77d81 46B
4e10bcf39eaa15cc723d5f64c735d80079468d 537B
4f93301df01411007c19b4b04d071be868e453 235B
共 457 条
- 1
- 2
- 3
- 4
- 5
菜鸟咸鱼一锅端
- 粉丝: 92
- 资源: 21
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Prophet时间序列预测入门.ipynb
- 一款由Java写的射击游戏.zip算法资源
- 一些java的小游戏项目,贪吃蛇啥的.zip用户手册
- 在线实时的斗兽棋游戏,时间赶,粗暴的使用jQuery + websoket 实现实时H5对战游戏 + java.zip课程设计
- HTML5酒店网站模板.zip
- 基于SpringBoot开发的支付系统(包括支付宝支付,微信支付,订单系统).zip
- C基于Qt的学生成绩管理系统.zip毕业设计
- 基于深度卷积神经网络(CNN)模型的图像着色研究与应用系统实现
- Java Web实验报告五:基于JSP的留言本
- Java Web实验报告四:基于AJAX的级联下拉菜单
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
- 6
前往页