下面开始讨论几个 Spring Security 里面的核心对象。

  • org.springframework.security.core.context.SecurityContext接口表示的是当前应用的安全上下文。通过此接口可以获取和设置当前的认证对象。
  • org.springframework.security.core.Authentication接口用来表示此认证对象。通过认证对象的方法可以判断当前用户是否已经通过认证,以及获取当前认证用户的相关信息,包括用户名、密码和权限等。

要使用Authentication认证对象,首先需要获取到 SecurityContext 对象。通过 org.springframework.security.core.context.SecurityContextHoldergetContext() 的静态方法 就可以获取。再通过 SecurityContext.getAuthentication()就可以得到Authentication。通过认证对象的 Authentication.getPrincipal() 方法就可以获得当前的认证主体

认证主体通常是 UserDetails 接口的实现,典型的认证过程就是当用户输入了用户名和密码之后,UserDetailsService通过用户名找到对应的 UserDetails 对象,接着比较密码是否匹配。如果不匹配,则返回出错信息;如果匹配的话,说明用户认证成功,就创建一个实现了 Authentication接口的对象,如 org.springframework.security. authentication.UsernamePasswordAuthenticationToken 类的对象。再通过 SecurityContext.setAuthentication() 方法来设置此认证对象。

//获取当前认证用户的用户名
public static String getAuthenticatedUsername() { String username = null; Object principal = SecurityContextHolder.getContext() .getAuthentication().getPrincipal(); if (principal instanceof UserDetails) { username = ((UserDetails) principal).getUsername(); } else { username = principal.toString(); } return username;
}

默认情况下(Web应用来说),SecurityContextHolder使用 ThreadLocal来保存 SecurityContext对象。因此,SecurityContext对象对于当前线程上所有方法都是可见的。这种实现对于 Web 应用来说是合适的。

不过在有些情况下,如桌面应用,这种实现方式就不适用了。Spring Security 允许开发人员对此进行定制。开发人员只需要实现接口 org.springframework.security.core.context.SecurityContextHolderStrategy并通过 SecurityContextHolder.setStrategyName(String)方法让 Spring Security 使用此实现即可。

另外一种设置方式是使用系统属性。Spring Security 默认提供了另外两种实现方式:

  • SecurityContextHolder.MODE_GLOBAL表示当前应用共享唯一的 SecurityContextHolder;
  • SecurityContextHolder.MODE_INHERITABLETHREADLOCAL表示子线程继承父线程的 SecurityContextHolder。
//使用全局唯一的 SecurityContextHolder的示例。
public void useGlobalSecurityContextHolder() { SecurityContextHolder.setStrategyName(SecurityContextHolder.MODE_GLOBAL);
}

SpringSecurity之SecurityContext和Authentication对象相关推荐

  1. SpringSecurity中文文档—Authentication— Authentication Architecture

    文章目录 SecurityContextHolder SecurityContext Authentication GrantedAuthority AuthenticationManager Pro ...

  2. SpringSecurity中文文档—Authentication— Reading Username/Password

    文章目录 Form Login Basic Authentication Digest Authentication Password Storage In-Memory Authentication ...

  3. Spring Security登录用户数据获取(4)

    1. 登录用户数据获取   登录成功之后,在后续的业务逻辑中,开发者可能还需要获取登录成功的用户对象,如果不使用任何安全管理框架,那么可以将用户信息保存在HttpSession中,以后需要的时候直接从 ...

  4. Springcloud之OAuth2

      OAuth2是一个开放的标准,协议.即允许用户让第三方应用访问某一个网站上存储的用户私密资源(照片,头像等).这个过程中无需将用户名和密码提供给第三方应用.在互联网中,我们最常见的OAuth2的应 ...

  5. Spring Security 参考手册(一)

    Spring Security 参考手册 Ben AlexLuke TaylorRob WinchGunnar Hillert Spring security 是一个强大的和高度可定制的身份验证和访问 ...

  6. 在Spring MVC Web应用程序中添加社交登录:单元测试

    Spring Social 1.0具有spring-social-test模块,该模块为测试Connect实现和API绑定提供支持. 该模块已从Spring Social 1.1.0中删除,并由 Sp ...

  7. spring-security权限控制详解

    在本例中,主要讲解spring-boot与spring-security的集成,实现方式为: 将用户.权限.资源(url)采用数据库存储 自定义过滤器,代替原有的 FilterSecurityInte ...

  8. SpringSecurity入门

    Spring Security介绍: Spring Security 的前身是 Acegi Security ,是 Spring 项目组中用来提供安全认证服务的框架. (https://project ...

  9. SpringSecurity框架【详解】

    SpringSecurity 来源视频 文章目录 SpringSecurity 1.概述 2.Spring Security.Apache Shiro 选择问题 2.1.Shiro 2.1.1.shi ...

最新文章

  1. “京东小贷” 注册资本由30亿元增至50亿元,恭喜
  2. html手机显示评论列表页面,请问如何完美显示评论列表头像
  3. 国开大学计算机应用基础作业二,国家开放大学《计算机应用基础》形考作业二答案解析 (2)...
  4. 将您的SQL Server工作负载迁移到PostgreSQL
  5. Android应用--简、美音乐播放器增加音量控制
  6. 异步编程的优势和难点
  7. Mac MySQL重置Root密码
  8. 天锐绿盾技术大讲堂:终端出现红色“+”
  9. HI3520D 音频
  10. c语言式表白,c语言表白必备
  11. adsl modem的内置命令(viking)
  12. Opencv图像识别从零到精通(34)---SIFI
  13. EasyExcel导出Excel 自定义 表头颜色
  14. 加速度传感器灵敏度表示的几种方式LSB/g,count/g,V/g,V/°
  15. pg_repack 处理表和索引的膨胀
  16. 日期,手机号码正则表达式校验,身份证校验等常用工具
  17. 山西宗教文化漫谈(三)一五台山:四大佛山之首
  18. centos7安装pip
  19. BUUCTF之“judgement_mna_2016”
  20. Gigaphoton供给最新版ArF受激准分子激光器GT65A

热门文章

  1. 电脑摄像头识别二维码OpenCV程序
  2. 计算机网盘变成红色是怎么回事,电脑小知识:硬盘变红了会带来哪些危害?
  3. 玫琳凯携手联合国机构推出女性创业加速器计划
  4. 如何降低APP运营成本?
  5. Java - 加号(+)的作用
  6. 惠普打印机、扫描仪二次开发、支持状态获取
  7. 解决word文件由于扩展名不匹配问题
  8. 计算机人才供需状况和就业形势分析,计算机科学与技术就业形势分析
  9. Unity3D中角色撞击物体弹出提示框或显示对象效果
  10. android locale app内设置,Android app应用多语言切换功能实现