首页 > 其他分享 >系统多种用户角色认证登录授权如何实现?

系统多种用户角色认证登录授权如何实现?

时间:2024-04-06 12:11:07浏览次数:28  
标签:... String 登录 userId jwt 用户 认证 授权 id

前提:本项目是springboot写的后端,使用spring security + jwt实现去实现student、company、admin三种用户角色的认证与授权

方法1:建立全局唯一的用户标识符uuid

为每个用户生成一个全局的UUID。

前情提要:本来设计了三张数据库表:student、company、admin。每张表存放相应角色相应用户的基本信息(id,username,password,email等信息,每种用户信息需要的字段大为不同,所以设计了三张表)

具体操作:创建一个同一用户表user,用来存放所有用户共有信息(username,password),这张总表有一个字段为uuid,是每个用户全局唯一的id。然后在具体的student、company、admin表中引用这个全局id,并且存放各自特有的信息。

方法2:在jwt中包含用户类型

在JWT的claims中明确包含用户类型,这样即使id重复了,可以通过用户类型来判断用户是属于哪个表。通过修改jwt生成和解析逻辑来实现

修改jwt生成逻辑

在生成jwt时,除了用户id外,还要包含用户类型
backend/utils/JwtUtil.java:

...
// 调用getJwtBuilder方法创建一个新的jwt
    public static String createJWT(String userId,String userType) {
        // 这里应该将用户id和用户类型拼接成一个字符串为subject
        String subject = userId + ',' + userType;
        JwtBuilder builder = getJwtBuilder(subject, null, getUUID()); // 构建jwt
        return builder.compact(); // 返回一个压缩过的jwt
    }
...

修改解析jwt逻辑

backend/config/filter/JwtAuthenticationTokenFilter.java

...
// 截取实际的jwt部分,处理验证jwt
        token = token.substring(7);
        String userId;
        String userType;
        try {
            Claims claims = JwtUtil.parseJWT(token); // 尝试解析
            // 解析成功后,claims.getSubject()返回的是一个字符串,包含两部分"userId,userType"
            String[] = claims.getSubject().split(",");
            userId = parts[0];
            userType = parts[1];
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
...

接下来就要去调整数据库查询逻辑,将查到的user实体及其usertype提取到spring security上下文中

调整数据库查询逻辑

当从数据库中查询用户信息时,总是同时考虑用户ID和用户类型。例如,在Spring服务中,可以为每种用户类型提供不同的查询方法,或者创建一个更通用的查询方法,它接受用户ID和用户类型作为参数。

具体措施有待更新...

前端和后端的验证

在前端和后端都进行用户类型的验证,确保在执行任何用户相关的操作时都考虑到用户类型。例如,不应该允许一个以company身份认证的用户ID去访问admin特有的接口。

具体措施有待更新...

标签:...,String,登录,userId,jwt,用户,认证,授权,id
From: https://www.cnblogs.com/rdisheng/p/18117302

相关文章

  • 认证加密概念笔记
    认证加密概念笔记1.安全认证参考:https://blog.csdn.net/qq_41644069/article/details/1213019551.1公钥私钥公钥和私钥用来加解密数据,如果使用任意一把来加密数据,那么只有使用另外一把才能解密数据。公钥可以公开供其他人使用,自己只保留自己的私钥。一般简单情况就是公钥加......
  • 伪单点登录
    伪单点登录记录下昌平网格系统集成我们用若依框架写的统计系统的思路无非就是在前端从他们页面往我们的页面跳转,大概步骤:1.用户先通过账号密码登录网格系统,然后返回个token名叫heToken返回给前端,前端在浏览器缓存cookie里保存该token2.前端访问我们的页面,先判断cookie里面有......
  • 在CentOS 7中配置登录为字符登录模式
    在CentOS7中配置登录为字符登录模式,可以通过修改系统服务的默认目标来实现。字符登录模式通常对应于多用户模式(multi-usermode),在这种模式下,系统不提供图形界面,而是直接进入命令行界面。以下是配置CentOS7为字符登录模式的步骤:查看当前默认目标:首先,你需要查看当前的默认登录界......
  • 如何做到服务器之间的免密登录
    1.当A服务器访问B时,A服务器需要生成公钥和私钥2.A服务器把自己的公钥发送给B服务器,B服务器接收并加入白名单3.以后如果B服务器发送信息到A时,信息是根据公钥加密发送,保证了安全性,A服务器会接收到信息,根据私钥解密获取解密后的信息。 每次启动或者关闭hadoop会频繁输入密码,操作......
  • 黑马点评part1 -- 短信登录
    目录 1.导入项目: 2.基于Session实现短信验证登录2.1原理 : 2.2发送短信验证码: 2.3短信验证码登录和验证功能:2.4登录验证功能2 .5隐藏用户敏感信息2.6session共享问题2.7Redis代替session2.8基于Redis实现短信登录UserSer......
  • 【VMware vCenter】修改vCenter Server管理后台VAMI登录用户ROOT的密码策略。
    vCenterServer作为家庭实验室环境时,可以设置一个简单且容易记住的密码,而不需要考虑那么多的安全性要求。默认情况下,vCenter的密码强度要求比较高,SSO用户还好可以修改,VAMI账户root并没有提供可以修改的地方。vCenter的SSO用户密码策略可以在vSphereClient-系统管理-SingleSign......
  • 绕过WPS Office登录:轻松解锁所有功能的操作指南
    对于广大WPSOffice用户来说,最近的版本更新带来了一项不太受欢迎的变化:必须登录账户才能完全使用软件。这项更改意味着,如果用户在首次启动软件时拒绝登录,几乎所有的顶部工具栏按钮都会变为不可用状态,显示为灰色。尽管简单的登录过程可以轻松解决这个问题,但许多用户对此感到不满......
  • 华为ENSP SSH使用RSA密钥交换进行远程登录实验
    实验拓扑:实验流程:1、AR1模拟客户端,AR2模拟远程登录服务器1、AR2开启SSH服务,配置AAA本地用户2、交换AR1和AR2的host主机密钥3、实现AR1远程登录AR2实验配置:先配置AR1和AR2的IP地址[AR1]intGigabitEthernet0/0/0[AR1-GigabitEthernet0/0/0]ipadd192.168.1.124[A......
  • SpringSecurity认证和授权流程详解
    什么是SpringSecuritySpringSecurity是一个Java框架,用于保护应用程序的安全性。它提供了一套全面的安全解决方案,包括身份验证、授权、防止攻击等功能。SpringSecurity基于过滤器链的概念,可以轻松地集成到任何基于Spring的应用程序中。它支持多种身份验证选项和授权策略,开发人员......
  • 宁波ISO27001认证:信息安全管理的黄金标准
    ......