1.Spring Security 目前支持认证一体化如下认证技术:

HTTP BASIC authentication headers (一个基于IEFT  RFC 的标准)
HTTP Digest authentication headers (一个基于IEFT  RFC 的标准)
HTTP X.509 client certificate exchange  (一个基于IEFT RFC 的标准)
LDAP (一个非常常见的跨平台认证需要做法,特别是在大环境)
Form-based authentication (提供简单用户接口的需求)
OpenID authentication
Computer Associates Siteminder
JA-SIG Central Authentication Service  (CAS,这是一个流行的开源单点登录系统)
Transparent authentication context  propagation for Remote Method Invocation and HttpInvoker  (一个Spring远程调用协议)

2.但是有时不想使用这些认证,需要自定义用户认证

2.1 代码如下:

//从spring容器中获取UserDetailsService(这个从数据库根据用户名查询用户信息,及加载权限的service)
UserDetailsService userDetailsService = (UserDetailsService)SpringContextUtil.getBean("userDetailsService");//根据用户名username加载userDetails
UserDetails userDetails = userDetailsService.loadUserByUsername(username);//根据userDetails构建新的Authentication,这里使用了
//PreAuthenticatedAuthenticationToken当然可以用其他token,如UsernamePasswordAuthenticationToken
PreAuthenticatedAuthenticationToken authentication = new PreAuthenticatedAuthenticationToken(userDetails, userDetails.getPassword(),userDetails.getAuthorities());//设置authentication中details
authentication.setDetails(new WebAuthenticationDetails(request));//存放authentication到SecurityContextHolder
SecurityContextHolder.getContext().setAuthentication(authentication);
HttpSession session = request.getSession(true);
//在session中存放security context,方便同一个session中控制用户的其他操作
session.setAttribute("SPRING_SECURITY_CONTEXT", SecurityContextHolder.getContext());

2.2 方法userDetailsService.loadUserByUsername(username) 如下:

    /*** 获取用户Details信息的回调函数.*/public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException,DataAccessException {GeOperator geOperator = geOperatorService.findOperatorByPK(username);if(geOperator == null){throw new UsernameNotFoundException("","用户名错误");}//加载该用户权限Set<GrantedAuthority> grantedAuths = obtainGrantedAuthorities(geOperator);boolean enabled = true;boolean accountNonExpired = true;boolean credentialsNonExpired = true;boolean accountNonLocked = true;UserDetails userdetails = new MisUser(username, geOperator.getPwd(), geOperator, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, grantedAuths);return userdetails;}

参考问题:

How to manually set an authenticated user in Spring Security / SpringMVC

在spring security手动 自定义 用户认证 SecurityContextHolder相关推荐

  1. 微服务商城系统(十) Spring Security Oauth2 + JWT 用户认证

    文章目录 一.用户认证分析 1.认证 与 授权 2.单点登录 3.第三方账号登录 4.第三方认证 5.认证技术方案 6.Security Oauth 2.0 入门 7. 资源服务授权 (1)资源服务授 ...

  2. 3.Spring Security 自定义用户认证

    Spring Security自定义用户认证 自定义认证过程 自定义认证的过程需要实现Spring Security提供的UserDetailService接口,该接口只有一个抽象方法loadUser ...

  3. Spring全家桶-Spring Security之自定义数据库表认证和鉴权

    Spring全家桶-Spring Security之自定义数据库表认证和鉴权 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供 ...

  4. Spring Security | 轻松搞定认证授权~

    文章目录 一.Spring Security 简介 二.整合 Spring Security 1.创建项目,导入依赖 2.创建数据库,搭建环境 3.配置数据库 4.创建实体类 5.实现 UserMap ...

  5. SpringSecurity权限管理框架系列(六)-Spring Security框架自定义配置类详解(二)之authorizeRequests配置详解

    1.预置演示环境 这个演示环境继续沿用 SpringSecurit权限管理框架系列(五)-Spring Security框架自定义配置类详解(一)之formLogin配置详解的环境. 2.自定义配置类 ...

  6. Spring Security OAuth2——自定义OAuth2第三方登录(Gitee)并与UsernamePassword登录关联解决方案

    前文:Spring Security OAuth2--自定义OAuth2第三方登录(Gitee) Maven 主要 <!--Spring Security--><dependency ...

  7. Spring Security中的SecurityContext和SecurityContextHolder是什么?

    SecurityContext和SecurityContextHolder是Spring Security的两个基本类. SecurityContext用于存储当前经过身份验证的用户的详细信息,也称为 ...

  8. Spring Security 集成 Authing CAS 认证(一)

    01 集成介绍 单点登录 (Single Sign On),英文名称缩写 SSO,意思是在多系统的环境中,登录单方系统,就可以无须再次登录,访问相关受信任的系统.也就是说,只要登录一次单体系统即可. ...

  9. spring security webflux 自定义登录页面

    spring security webflux 自定义登录页面 ************************* 相关类及接口 ServerHttpSecurity public class Ser ...

最新文章

  1. 为什么淘宝、天猫和旺信的 App 不整合成一个?
  2. 服务器与浏览器数据传输过程中编码问题
  3. Java实现算法导论中快速傅里叶变换FFT迭代算法
  4. oracle数据导入-dblink方式
  5. 金陵科技学院计算机系男女比,眼已亮瞎:719所全国高校男女比例排名
  6. 六度人和张星亮:SaaS市场要回归TO B本质
  7. Struts2学习笔记(四) Action(中)
  8. 基于python的在线考试系统-基于 Python 的电子教室和在线考试系统源代码
  9. 单元素的枚举类型已经成为实现Singleton的最佳方法
  10. scala中的柯里化函数
  11. AndroidHttpClient详解
  12. 转《腾讯大讲堂11 拍拍ce工作经验分享》
  13. ArcGIS教程 - 9 矢量数据空间分析
  14. log.error打印异常堆栈问题
  15. excel删除奇数行或者偶数行
  16. 3GPP协议R15完整版下载
  17. 2016年江苏省普通高等学校第十三届高等数学竞赛试题(本科一级)讲解
  18. 用Xbrowser连接CentOS
  19. 硬币翻转倍数递增试算
  20. StarUML for MAC 破解

热门文章

  1. Continuous Integration 对 ABAP 技术栈来说意味着什么
  2. 邓白氏编码官方查询地址
  3. 结庐在人境,而无车马喧
  4. Android界面美化的一点点积累
  5. 根据起始日期、起始时间、终止日期、终止时间计算天数
  6. Jenkins配置阿里企业邮箱
  7. 滚动条 scrollbar 和scrollbar-thumb 样式
  8. VxWorks6.7新建bootrom工程
  9. 计算机,软件工程类毕业论文选题要求
  10. Eclipse护眼背景色