SecurityContextHolder, SecurityContext and Authentication Objects

本文主要是介绍SecurityContextHolder, SecurityContext and Authentication Objects,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

SecurityContextHolder, SecurityContext and Authentication Objects

    最重要并且最根本的object是SecurityContextHolder,我们将当前应用security上下文的所有数据保存在里面,这些数据包括应用系统中使用的principle数据。SecurityContextHolder默认使用ThreadLocal局部变量保存这些数据,这意味着security上下文对于相同的正在执行的线程的方法是可用的,即使security上下文没有显式地将参数传递给这些方法,如果希望在当前principal请求处理完毕后要清理这些线程,这样使用ThreadLocal局部变量会是非常安全的。当然,Spring Security会自动的处理这些问题,所以你不需要有任何的担心。

    一些应用不一定适合使用ThreadLocal,因为它们可能会用特定的方式运行线程。举个例子,一个Swing客户端可能希望所有在JVM中的线程使用Security上下文。你可以配置SecurityContextHolder使得它在启动时以你希望的方式来保存上下文数据。对于一个独立的应用你可以使用SecurityContextHolder.MODE_GLOBAL策略。其他应用可能希望由安全线程与其衍生出来的线程具有统一的安全标示,则可以使用SecurityContextHolder.MODE_INHERITABLETHREADLOCAL策略。你可以通过两种方式改变默认的SecurityContextHolder.MODE_THREADLOCAL模式。第一种是设置一个系统属性,第二种方式是调用SecurityContextHolder的一个静态方法。大多数应用不需要修改这个默认的策略,如果需要修改,看看JavaDocs中的SecurityContextHolder获取更多信息。

Obtaining information about the current user

    在SecurityContextHolder中我们保存了当前与应用交互的principal数据,Spring Security使用一个Authentication对象来保存和展示这些数据。你不需要自己手工创建一个Authentication对象,而且查询这个对象也相当的简单,你可以使用下面的代码(在你的应用的任意位置)获取当前认证用户的姓名信息:
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
if (principal instanceof UserDetails) {String username = ((UserDetails)principal).getUsername();
} else {String username = principal.toString();
}
    getContext()方法返回的对象是SecurityContext接口的实例,这就是保存在ThreadLocal局部变量中的对象。

参考资料来自《 Spring Security Reference Documentation(3.1)》,下载地址: http://download.csdn.net/detail/u010009900/9169039

这篇关于SecurityContextHolder, SecurityContext and Authentication Objects的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/956712

相关文章

【异常】java.sql.SQLException: Unable to load authentication plugin ‘caching_sha2_password‘.

异常现象 执行mysql数据库操作的时候,出现以下异常信息: java.sql.SQLException: Unable to load authentication plugin 'caching_sha2_password'.at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:868) ~[mysql-connector-

3A介绍-Authentication(认证)、Authorization(授权)和Accounting(计费/核算)

文章目录 前言1. 3A概念1.1 Authentication(认证)1.2 Authorization(授权)1.3 Accounting(计费/核算)1.4 三者的关系 2. 使用场景2.1 企业内部网络2.2 Web 应用程序2.3 移动应用2.4 金融服务2.5 远程访问和VPN2.6 物联网(IoT)设备 3. 实战练习篇3.1 华为路由器3A配置命令整理 前言 w

JavaScript - Objects

对象定义: let person = {name: {first: "Bob",last: "smith"},age: 32,gender: 'male',interests: ['music', 'skiing'],bio: function () {alert(this.name[0] + ' ' + this.name[1] + ' is ' + this.age + ' year

关于javamail-with-ms-exchange-no-authentication-mechansims-supported-by-both-server错误的解决办法

最近在写邮件相关的程序的时候碰到一个错误,javamail-with-ms-exchange-no-authentication-mechansims-supported-by-both-server 字面上的意思,身份验证有问题。于是开始google If you're trying to connect to your mail server without authentication,

URP custompasscustom render objects

https://dbbh666.blog.csdn.net/article/details/141296728?spm=1001.2014.3001.5502 上一次 custom render pass的时候,直接是quad的渲染,如果想把任意对象绘制到FBO怎么写呢 参考这两个高手的文章,总结一下 https://www.bilibili.com/read/cv6735961/ https:

访问Neo4j验证失败(The client is unauthorized due to authentication failure.)

使用Neo4j的过程中,可以打开页面,但是无法连通数据库。 在查看日志发现有下面的报错: 2018-12-18 05:30:34.693+0000 ERROR Unexpected error detected in bolt session '286ed4fffe88ed75-00016e40-00000001-8318869067983891-a1fb2d6d'. The client i

mysql:2059 -Authentication plugin ‘caching-sha2-password‘解决办法

出现 “Authentication plugin ‘caching_sha2_password’ cannot be loaded” 错误通常意味着 MySQL 客户端和服务器之间在尝试使用 caching_sha2_password 认证插件时遇到了问题。以下是一些可能的解决步骤: 亲测有效 更改用户身份验证方式:可以尝试将用户的身份验证方式更改为较旧的插件,你可以在 MySQL 中执行以下

skimage包的小优化(2):模仿remove_small_objects()函数保留图片中连通域最大的区域

python模仿remove_small_objects()函数保留图片中连通域最大的区域 skimage包的morphology子模块中,提供了一个remove_small_objects()函数,可以通过自己设定的连通域面积阈值有效去掉图片中的噪点,但是在具体使用过程中会发现:这个函数使用起来还有诸多的不便,好在这个函数的源代码并不长,在在skimage包的小优化(1):模仿remove_s

navicat 连接 mysql 出现Client does not support authentication protocol requested by server

安装了navicat 和 mysql,结果最后在navicat中连接mysql时,出现了如下错误: Client does not support authentication protocol requested by server; consider upgrading MySQL client 解决办法: 打开本地mysql的命令行: 添加认证方式: USE mysql; A

redis实战 migrate异常NOAUTH Authentication required.

当redis cluster集群设置密码的时候,使用migirate需要加上密码,否则会报如下异常: (error) ERR Target instance replied with error: NOAUTH Authentication required. redis在3.0之前是不支持migrate带有password的,在3.0之后可以在migrate中加入auth参数来做权限校验