news 2026/6/10 17:21:45

Spring Security+JWT问题记录

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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: ['系统管理员', '医生', '护士', '院长', '科室主任', '药剂师', '患者', '财务人员'] } // 所有角色都能访问 },
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 16:08:05

瑞昱Realtek无线网卡8188GU驱动:Windows与Linux双平台终极解决方案

瑞昱Realtek无线网卡8188GU驱动&#xff1a;Windows与Linux双平台终极解决方案 【免费下载链接】瑞昱Realtek无线网卡8188GU驱动Windows 本仓库提供了一个适用于瑞昱Realtek无线网卡8188GU的Windows驱动程序。该驱动程序是从水星MW150UH驱动中提取出来的&#xff0c;可以作为Nd…

作者头像 李华
网站建设 2026/6/10 12:27:11

C语言实战3

C语言实战项目&#xff1a;学生成绩管理系统项目目标 开发一个基于C语言的学生成绩管理系统&#xff0c;实现成绩录入、查询、统计及文件存储功能。核心功能实现数据结构设计 使用结构体存储学生信息&#xff0c;包含学号、姓名、科目成绩等字段&#xff1a;typedef struct {ch…

作者头像 李华
网站建设 2026/6/10 12:20:30

人工智能基础知识笔记二十七:构建一个可以搜索本地文件的Agent

本篇文章主要介绍如何构建一个Agent能够解析输入的文字&#xff0c;理解其意图&#xff0c;并且在本地文件系统中搜索符合条件的文件。同时还提供一个Web的页面可以交互式查询本地文件系统。1、功能说明主要功能时根据用户输入的符合条件的需求描述&#xff0c;如&#xff1a;f…

作者头像 李华
网站建设 2026/6/10 12:32:16

Avalonia XPF:WPF跨平台迁移的终极解决方案

Avalonia XPF&#xff1a;WPF跨平台迁移的终极解决方案 【免费下载链接】Avalonia AvaloniaUI/Avalonia: 是一个用于 .NET 平台的跨平台 UI 框架&#xff0c;支持 Windows、macOS 和 Linux。适合对 .NET 开发、跨平台开发以及想要使用现代的 UI 框架的开发者。 项目地址: htt…

作者头像 李华
网站建设 2026/6/10 2:15:26

Turbo Intruder终极配置与高效实战指南

工具概述与核心价值 【免费下载链接】turbo-intruder Turbo Intruder is a Burp Suite extension for sending large numbers of HTTP requests and analyzing the results. 项目地址: https://gitcode.com/gh_mirrors/tu/turbo-intruder Turbo Intruder是一款专为Burp …

作者头像 李华
网站建设 2026/6/9 21:12:53

KAT-V1-40B:智能决策新范式,大模型推理效率革命

导语 【免费下载链接】KAT-V1-40B 项目地址: https://ai.gitcode.com/hf_mirrors/Kwaipilot/KAT-V1-40B 快手Kwaipilot团队开源的KAT-V1-40B大模型凭借创新的AutoThink动态推理机制&#xff0c;在LiveCodeBench Pro代码基准测试中超越Seed和o3-mini等闭源模型&#xff…

作者头像 李华