当前位置: 首页 > news >正文

Spring Security+JWT问题记录

一、.security里面的Role要与数据库要一致

数据库内如下

security配置类SecurityConfig里里面roleName指定后端的权限角色名字

如下:

.requestMatchers("/ward/**").hasAnyAuthority("医生","护士","科室主任","系统管理员","院长")z这里指定Role的角色名字------就是roleName

二、后端内部的角色命名方式要一致

后端security在两个类里面设置权限角色名字

  • SecurityConfig(配置类)
  • CustomUserDetailsService(作用:把数据库用户信息拿出来给配置类,并转换为Spring Security的UserDetails对象)
public class CustomUserDetailsService implements UserDetailsService { @Autowired private UserRepository userRepository; @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { // 1. 从数据库查找用户 User user = userRepository.findByUsername(username) .orElseThrow(() -> new UsernameNotFoundException("用户不存在: " + username)); // 2. 获取用户的角色并转换为Spring Security权限 // 映射数据库中的角色名到权限系统中的角色名 List<SimpleGrantedAuthority> authorities = user.getRoles().stream() .map(role -> { String roleName = role.getRoleName(); String authorityName; // 角色名映射 switch (roleName) { case "ADMIN": authorityName = "系统管理员"; break; case "DOCTOR": authorityName = "医生"; break; case "NURSE": authorityName = "护士"; break; case "HEAD_NURSE": authorityName = "护士长"; break; case "DEAN": authorityName = "院长"; break; case "PHARMACIST": authorityName = "药剂师"; break; case "PATIENT": authorityName = "患者"; break; default: authorityName = roleName; } System.out.println("角色映射: " + roleName + " -> " + authorityName); return new SimpleGrantedAuthority(authorityName); }) .collect(Collectors.toList()); // 3. 转换为Spring Security的UserDetails对象 return org.springframework.security.core.userdetails.User .withUsername(user.getUsername()) .password(user.getPassword()) //密码 .disabled(!user.getEnabled()) // enabled字段 .accountExpired(false) // 根据你的业务需要调整 .accountLocked(false) //是否锁 .credentialsExpired(false) // 是否过期 .authorities(authorities) // 角色 .build(); } }

在里面CustomUserDetailsService设置rolename的地方如下

String roleName = role.getRoleName();
String authorityName;

三、CustomUserDetailsService设置中英文映射(可选)

我设置了中英文映射,因为我后端Rolename是中文,security会自动映射成英文,再返回给后端

如果你本身设置的rolename角色英文模式,就不用转了

映射模式如下

系统管理员----映射---ADMIN

医生---映射---DOCTOR

四、前端传给后端的role要和后端一致

如下,我截取了一小部分前端路由的代码

在里面的roles---指定可以访问的权限角色名字,这里要和后端一致

mport type { RouteRecordRaw } from 'vue-router' const routes: RouteRecordRaw[] = [ { path: '/login', name: 'Login', component: () => import('@/views/Login/login.vue'), meta: { title: '登录', requiresAuth: false } }, { path: '/', component: () => import('@/layouts/MainLayout.vue'), redirect: '/dashboard', meta: { requiresAuth: true }, // 父路由统一要求认证,子路由无需重复配置 children: [ { path: 'dashboard', name: 'Dashboard', component: () => import('@/views/Dashboard/index.vue'), meta: { title: '首页', roles: ['系统管理员', '医生', '护士', '院长', '科室主任', '药剂师', '患者', '财务人员'] } // 所有角色都能访问 },
http://www.jsqmd.com/news/76170/

相关文章:

  • PentestGPT:AI赋能的渗透测试工具完全指南
  • 别再手动重启Agent了!自动化治理的5个黄金实践法则
  • 41、文本编辑器设置选项详解
  • 极简云UE智能体:从 “售前营销” 到 “服务提效”,这套产品逻辑到底强在哪?
  • 云服务器未来趋势:智能化、自动化与绿色化
  • JetBrains Maple Mono字体配置指南:打造完美的编程环境
  • 人工智能基础知识笔记二十七:构建一个可以搜索本地文件的Agent
  • 政府公文写作辅助系统:Llama-Factory定制政务语言模型
  • 语音合成中的文本障碍突破:TTS项目特殊文本处理技术深度解析
  • 3000亿参数仅需2卡部署:ERNIE 4.5如何用2比特量化技术重塑企业AI格局
  • ​GEO优化:为农副食品加工产业插上AI翅膀,在乡村产业振兴浪潮中抢占品牌新高地 - 博客万
  • 澜舟科技孟子模型微调教程:Llama-Factory操作实例
  • 2025年口碑好的中空壁塑钢缠绕管设备/hdpe缠绕管设备行业内口碑厂家排行榜 - 品牌宣传支持者
  • React Stripe.js 支付集成完整教程
  • 终极指南:5分钟掌握VSCode Blade格式化插件
  • KAT-V1-40B:智能决策新范式,大模型推理效率革命
  • ConvNeXt终极指南:从零开始掌握现代卷积神经网络
  • Llama-Factory自动超参搜索功能体验:提升微调效率50%
  • 【节点】[Adjustment-Hue节点]原理解析与实际应用
  • 【C语言】循环嵌套江湖:while小弟+for大哥带你开启封神之路
  • 2025年12月接触角测量仪哪家好性价比高,推荐市面上接触角测量仪优质供应商 - 品牌推荐大师
  • MobaXterm高效运维实战全攻略
  • 友达 G156HAN05.0 工业液晶显示屏:15.6 英寸宽温高色域场景的显示驱动技术解析
  • 2025 年浙江台州自动机床厂家最新推荐榜,技术实力与市场口碑深度解析液压自动机床/全自动机床/专用自动机床/球阀自动机床/轴类自动机床公司推荐 - 品牌鉴赏师
  • Slint布局革命:从布局困境到界面设计高手
  • Turbo Intruder终极配置与高效实战指南
  • Llama-Factory在边缘设备上的微调可行性探索
  • 新建BLE模板和实现基本功能
  • Avalonia XPF:WPF跨平台迁移的终极解决方案
  • 想在怀安县老家农村盖房子,靠谱的自建房公司口碑推荐。河北张家口市怀安县自建房公司/机构权威测评推荐排行榜。 - 苏木2025