首页 > 其他分享 >springboot将用户认证信息提取到上下文,获取用户实体

springboot将用户认证信息提取到上下文,获取用户实体

时间:2024-02-28 23:55:25浏览次数:31  
标签:map springboot UserDetailsImpl UsernamePasswordAuthenticationToken 信息提取 用户 获取 认证

@Service
public class InfoServiceImpl implements InfoService {
    @Override
    public Map<String, String> getinfo() {
        // 将用户认证信息从上下文中(SecurityContext)提取出来
        UsernamePasswordAuthenticationToken authenticationToken =
                (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication();
        // 获取用户详细信息,获取用户实体
        UserDetailsImpl loginUser = (UserDetailsImpl) authenticationToken.getPrincipal();
        User user = loginUser.getUser();

        Map<String,String> map = new HashMap<>();
        map.put("error_message", "success");
        map.put("id", user.getId().toString());
        map.put("username", user.getUsername());
        map.put("photo",user.getPhoto());

        return map;
    }
}

获取当前认证信息:

UsernamePasswordAuthenticationToken authenticationToken = 
(UsernamePasswordAuthenticationToken) 
SecurityContextHolder.getContext().getAuthentication();

这行代码从SecurityContextHolder获取当前的安全上下文(SecurityContext),然后获取其中的认证对象(Authentication),并尝试将其转换为UsernamePasswordAuthenticationToken类型。SecurityContextHolderUsernamePasswordAuthenticationTokenSpring Security提供的类,用于处理安全认证信息。
获取当前登录用户的详细信息:

UserDetailsImpl loginUser = (UserDetailsImpl) authenticationToken.getPrincipal();
通过调用authenticationToken.getPrincipal()获取认证主体,即用户的详细信息。这里假设主体是UserDetailsImpl类型,它是UserDetails接口的一个实现,用于封装用户信息。UserDetailsSpring Security的一个核心接口,包含了一些基本的用户信息,如用户名、密码、权限等。
获取用户实体:

User user = loginUser.getUser();
这行代码调用了UserDetailsImpl中的getUser方法来获取代表用户的实体对象。假设这里的User是一个自定义的实体类,包含了用户的各种属性。


获取当前认证信息,获取当前登录用户的详细信息是spring实现的?怎么就知道是登录状态的了?

image

image

标签:map,springboot,UserDetailsImpl,UsernamePasswordAuthenticationToken,信息提取,用户,获取,认证
From: https://www.cnblogs.com/rdisheng/p/18042404

相关文章

  • SpringBoot
    SpringBoot特性快速创建独立Spring应用SSM:导包、写配置、启动运行直接嵌入Tomcat、JettyorUndertow(无需部署war包)【Servlet容器】linuxjavatomcatmysql:war放到tomcat的webapps下jar:java环境;java-jar重点:提供可选的starter,简化应用整合场景启动器(starter)......
  • springboot中实现一个接口
    实现一个接口,需要在service里写一个接口,写一个实现,在controller里写一个类chatgpt4.0:在Spring框架中,实现一个接口通常遵循一种分层的架构模式,这种模式涉及到至少三个主要部分:接口定义、服务层实现、以及控制器层。这个流程确保了应用程序的高内聚、低耦合特性,同时也符合Spring......
  • springboot 集成 Dataway
    1.Dataway简介Dataway是Hasor生态中的一员,它通过提供一个UI界面来帮助开发者完成接口配置、测试、冒烟和发布等一系列任务。用户可以在Dataway的界面中进行接口的配置,无需编写任何代码。Dataway底层基于DataQL服务聚合能力,通过DataQL语言实现接口的聚合和定义,从而消除了传统开发......
  • PG用户权限管理
    参考文章1.https://www.cnblogs.com/zhoujinyi/p/10939715.html2.https://www.cnblogs.com/lijiaman/p/16558877.html具体实操创建一个可以登录的用户jack,且登陆密码是jack@123CREATEUSERjackLOGINwithPASSWORD'jack@123'授予jack连接数据库test_db的权限grantco......
  • 关于druid与springboot版本问题
    datasource:druid:driver-class-name:${sky.datasource.driver-class-name}url:jdbc:mysql://${sky.datasource.host}:${sky.datasource.port}/${sky.datasource.database}?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=u......
  • Session 0 是一个特殊的会话(Session),用于运行系统级别的服务和进程,而不是用户交互式会
    在Windows操作系统中,Session0是一个特殊的会话(Session),用于运行系统级别的服务和进程,而不是用户交互式会话。在WindowsVista及更高版本的操作系统中,引入了“会话0隔离”(Session0Isolation)的概念,即将服务与用户会话分离开来,以提高系统的安全性和稳定性。Session0中运行的......
  • centos7环境用docker-compose部署mysql5.7集群,redis7.2.4,springboot项目
    文件目录结构关于每个配置项及docker-compose的安装,大家可以自己查mysql配置文件master---my.cnf[mysqld]server_id=1gtid-mode=ONenforce-gtid-consistency=1binlog-ignore-db=mysqllog-bin=mysql-binbinlog_cache_size=......
  • springboot两种配置文件的使用(举例:端口号、虚拟路径配置)
    1、properties配置文件使用   2、yml配置文件、yaml配置文件 在项目中更常用 在项目中一般yml配置文件更为常用,因为yml层级更加明确、清晰,更为关注数据。 ......
  • 如何在SpringBoot中优雅地重试调用第三方API?
    1引言在实际的应用中,我们经常需要调用第三方API来获取数据或执行某些操作。然而,由于网络不稳定、第三方服务异常等原因,API调用可能会失败。为了提高系统的稳定性和可靠性,我们通常会考虑实现重试机制。本文将深入探讨如何在SpringBoot项目中优雅地重试调用第三方API,并结合代码......
  • SpringBoot 2x 系列之(七)web场景
    web场景1.SpringMVC自动配置概览SpringBootprovidesauto-configurationforSpringMVCthatworkswellwithmostapplications.(大多场景我们都无需自定义配置)Theauto-configurationaddsthefollowingfeaturesontopofSpring’sdefaults:InclusionofCont......