在spring security手动 自定义 用户认证 SecurityContextHolder
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相关推荐
- 微服务商城系统(十) Spring Security Oauth2 + JWT 用户认证
文章目录 一.用户认证分析 1.认证 与 授权 2.单点登录 3.第三方账号登录 4.第三方认证 5.认证技术方案 6.Security Oauth 2.0 入门 7. 资源服务授权 (1)资源服务授 ...
- 3.Spring Security 自定义用户认证
Spring Security自定义用户认证 自定义认证过程 自定义认证的过程需要实现Spring Security提供的UserDetailService接口,该接口只有一个抽象方法loadUser ...
- Spring全家桶-Spring Security之自定义数据库表认证和鉴权
Spring全家桶-Spring Security之自定义数据库表认证和鉴权 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供 ...
- Spring Security | 轻松搞定认证授权~
文章目录 一.Spring Security 简介 二.整合 Spring Security 1.创建项目,导入依赖 2.创建数据库,搭建环境 3.配置数据库 4.创建实体类 5.实现 UserMap ...
- SpringSecurity权限管理框架系列(六)-Spring Security框架自定义配置类详解(二)之authorizeRequests配置详解
1.预置演示环境 这个演示环境继续沿用 SpringSecurit权限管理框架系列(五)-Spring Security框架自定义配置类详解(一)之formLogin配置详解的环境. 2.自定义配置类 ...
- Spring Security OAuth2——自定义OAuth2第三方登录(Gitee)并与UsernamePassword登录关联解决方案
前文:Spring Security OAuth2--自定义OAuth2第三方登录(Gitee) Maven 主要 <!--Spring Security--><dependency ...
- Spring Security中的SecurityContext和SecurityContextHolder是什么?
SecurityContext和SecurityContextHolder是Spring Security的两个基本类. SecurityContext用于存储当前经过身份验证的用户的详细信息,也称为 ...
- Spring Security 集成 Authing CAS 认证(一)
01 集成介绍 单点登录 (Single Sign On),英文名称缩写 SSO,意思是在多系统的环境中,登录单方系统,就可以无须再次登录,访问相关受信任的系统.也就是说,只要登录一次单体系统即可. ...
- spring security webflux 自定义登录页面
spring security webflux 自定义登录页面 ************************* 相关类及接口 ServerHttpSecurity public class Ser ...
最新文章
- 为什么淘宝、天猫和旺信的 App 不整合成一个?
- 服务器与浏览器数据传输过程中编码问题
- Java实现算法导论中快速傅里叶变换FFT迭代算法
- oracle数据导入-dblink方式
- 金陵科技学院计算机系男女比,眼已亮瞎:719所全国高校男女比例排名
- 六度人和张星亮:SaaS市场要回归TO B本质
- Struts2学习笔记(四) Action(中)
- 基于python的在线考试系统-基于 Python 的电子教室和在线考试系统源代码
- 单元素的枚举类型已经成为实现Singleton的最佳方法
- scala中的柯里化函数
- AndroidHttpClient详解
- 转《腾讯大讲堂11 拍拍ce工作经验分享》
- ArcGIS教程 - 9 矢量数据空间分析
- log.error打印异常堆栈问题
- excel删除奇数行或者偶数行
- 3GPP协议R15完整版下载
- 2016年江苏省普通高等学校第十三届高等数学竞赛试题(本科一级)讲解
- 用Xbrowser连接CentOS
- 硬币翻转倍数递增试算
- StarUML for MAC 破解