Spring Security如何基于Authentication获取用户信息

 更新时间:2020年03月27日 10:36:21   作者:技术研究与问题解决  
这篇文章主要介绍了Spring Security如何基于Authentication获取用户信息,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

Spring Security使用一个Authentication对象来描述当前用户的相关信息。SecurityContextHolder中持有的是当前用户的SecurityContext,而SecurityContext持有的是代表当前用户相关信息的Authentication的引用。

这个Authentication对象不需要我们自己去创建,在与系统交互的过程中,Spring Security会自动为我们创建相应的Authentication对象,然后赋值给当前的SecurityContext。

但是往往我们需要在程序中获取当前用户的相关信息,比如最常见的是获取当前登录用户的用户名。在程序的任何地方,通过如下方式我们可以获取到当前用户的用户名。

public String getCurrentUsername() {
   Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
   if (principal instanceof UserDetails) {
     return ((UserDetails) principal).getUsername();
   }
   if (principal instanceof Principal) {
     return ((Principal) principal).getName();
   }
   return String.valueOf(principal);
  }

通过Authentication.getPrincipal()可以获取到代表当前用户的信息,这个对象通常是UserDetails的实例。获取当前用户的用户名是一种比较常见的需求,关于上述代码其实Spring Security在Authentication中的实现类中已经为我们做了相关实现,所以获取当前用户的用户名最简单的方式应当如下。

  public String getCurrentUsername() {
   return SecurityContextHolder.getContext().getAuthentication().getName();
  }

此外,调用SecurityContextHolder.getContext()获取SecurityContext时,如果对应的SecurityContext不存在,则Spring Security将为我们建立一个空的SecurityContext并进行返回。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 如何解决IDEA使用Tomcat控制台中文出现乱码问题

    如何解决IDEA使用Tomcat控制台中文出现乱码问题

    这篇文章主要介绍了如何解决IDEA使用Tomcat控制台中文出现乱码问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • java中Date类和Strng类的灵活转化

    java中Date类和Strng类的灵活转化

    这篇文章主要介绍了java中Date类和Strng类的灵活转化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • 解决MyEclipse10.7部署报错抛空指针异常问题的方法

    解决MyEclipse10.7部署报错抛空指针异常问题的方法

    这篇文章主要介绍了解决MyEclipse10.7部署报错抛空指针异常问题的方法,需要的朋友可以参考下
    2015-12-12
  • JavaWeb.servlet的基本使用方法详解

    JavaWeb.servlet的基本使用方法详解

    Servlet指在服务器端执行的一段Java代码,可以接收用户的请求和返回给用户响应结果,下面这篇文章主要给大家介绍了关于JavaWeb.servlet基本使用的相关资料,需要的朋友可以参考下
    2022-04-04
  • 一文详解Springboot集成mybatis-plus

    一文详解Springboot集成mybatis-plus

    这篇文章主要介绍了Mybatis-Plus与SpringBoot整合,并在项目中实战运用,列举其增删改查的使用方式,对学习或工作有一定的帮助,需要的小伙伴可以参考阅读
    2023-04-04
  • SpringBoot项目如何打可执行war包

    SpringBoot项目如何打可执行war包

    最近小编做了一个springboot项目,最后需要打成war包在容器中部署,下面小编给大家分享下SpringBoot项目如何打可执行war包,感兴趣的朋友一起看看吧
    2020-04-04
  • SpringBoot 整合 Apache Tika提取数据的具体操作

    SpringBoot 整合 Apache Tika提取数据的具体操作

    Apache Tika 是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,本文介绍了SpringBoot整合ApacheTika进行文件内容提取和数据泄露防护的实现,感兴趣的朋友一起看看吧
    2025-02-02
  • ThreadLocal的内存泄露问题

    ThreadLocal的内存泄露问题

    这篇文章主要介绍了Java中ThreadLocal的内存泄露问题,以及为什么会出现内存泄漏,感兴趣的小伙伴可以参考阅读
    2023-03-03
  • sprinboot项目启动一半到图形化界面卡住了的解决

    sprinboot项目启动一半到图形化界面卡住了的解决

    这篇文章主要介绍了sprinboot项目启动一半到图形化界面卡住了的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • Mybatis查询Sql结果未映射到对应得实体类上的问题解决

    Mybatis查询Sql结果未映射到对应得实体类上的问题解决

    使用mybatis查询表数据得时候,发现对应得实体类字段好多都是null,本文主要介绍了Mybatis查询Sql结果未映射到对应得实体类上的问题解决,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02

最新评论