Spring security 浅谈用户验证机制
step1:首先ApplicationUserDetailsService需要实现UserDetailsService接口(在
org.springframework.security.core.userdetails里面),实现获取用户Details信息的回调函数,必须要实现
loadUserByUsername方法,注意这里的User实现了UserDetails,CredentialsContainer,User类里面的参数分别有:
password,username,authorities,accountNonExpired,accountNonLocked,credentialsNonExpired,enable,
代码如下:


我们可以自定义添加新的User信息,这里我们自定义一个SimpleUser类继承User。
代码如下:

注意这里的SimpleUser必须继承User,而且必须继承上面这5个属性和hashCode,equals方法,构造方法中必须给上述这5个
属性赋值,ApplicationUserDetailsService调用构造方法,生成一个SimpleUser对象。如果user不存在,抛出一个
UsernameNotFoundException异常。
代码如下:

step2:loadUserByUsername方法返回后,会跳到DaoAuthenticationProvider(在
org.springframework.security.authentication.dao)类中的retrieveUser方法中


step3:retrieveUser方法返回后,会跳到AbstractUserDetailsAuthenticationProvider(在
org.springframework.security.authentication.dao)authenticate方法中,这个方法会先从缓存中查找user。


如果没有的话会从上一步DaoAuthenticationProvider的loadUserByUsername方法中把user查出来,这里会抛出
UserNameNotFoundException这个异常,应该是用户不存在这个错误,即Bad credentials。
step4:authenticate方法preAuthenticationChecks.check(user),这里进行基本有效性验证(是否有效,是否
被锁,是否过期)代码如下:

step5:authenticate方法中additionalAuthenticationChecks(user,
(UsernamePasswordAuthenticationToken) authentication)这里进行方法验证。代码如下:

Spring security 浅谈用户验证机制的更多相关文章
- Spring Security 入门—内存用户验证
简介 作为 Spring 全家桶组件之一,Spring Security 是一个提供安全机制的组件,它主要解决两个问题: 认证:验证用户名和密码: 授权:对于不同的 URL 权限不一样,只有当认证的用 ...
- Spring security 获取当前用户
spring security中当前用户信息 1:如果在jsp页面中获取可以使用spring security的标签库 在页面中引入标签 1 <%@ taglib prefix=" ...
- Spring Security默认的用户登录表单 页面源代码
Spring Security默认的用户登录表单 页面源代码 <html><head><title>Login Page</title></hea ...
- spring security实现记录用户登录时间等信息
目录 spring security实现记录用户登录时间等信息 一.原理分析 二.实现方式 2.1 自定义AuthenticationSuccessHandler实现类 2.2 在spring-sec ...
- 详解Spring Security的HttpBasic登录验证模式
一.HttpBasic模式的应用场景 HttpBasic登录验证模式是Spring Security实现登录验证最简单的一种方式,也可以说是最简陋的一种方式.它的目的并不是保障登录验证的绝对安全,而是 ...
- Spring Security实现禁止用户重复登陆(配置及原理)
系统使用了Spring Security做权限管理,现在对于系统的用户,需要改动配置,实现无法多地登陆. 一.SpringMVC项目,配置如下: 首先在修改Security相关的XML,我这里是s ...
- 深入Spring Security魔幻山谷-获取认证机制核心原理讲解(新版)
文/朱季谦 本文基于Springboot+Vue+Spring Security框架而写的原创学习笔记,demo代码参考<Spring Boot+Spring Cloud+Vue+Element ...
- spring security LDAP获取用户信息
很多企业内部使用LDAP保存用户信息,这章我们来看一下如何从LDAP中获取Spring Security所需的用户信息. 首先在pom.xml中添加ldap所需的依赖. <dependency& ...
- spring security使用数据库管理用户权限
<authentication-provider> <user-service> <user name="admin" password=" ...
随机推荐
- Windows下搭建Apache+Django+Python Web服务环境
最近在学Django,想用Apache搭建一个服务器环境,因此在网上看了好多资料,很多都是用Python2.6和Apache2.2搭建的环境,不过我还是想用Python35和Apache24来搭建,具 ...
- Windows下使用MinGW在命令行编译运行C++程序
之前学习C语言的时候都是用IDE类似CodeBlocks的工具写完直接编译运行的,今天突然心血来潮,自己下一个编译器,在命令行下,编译运行C++程序,了解一下编译过程. 一.安装编译器 首先你需要下载 ...
- Author Agreement
Dear Editor,We the undersigned declare that this manuscript entitled “文章标题” is original, has not bee ...
- jquery的50个免费插件
说不定什么时候用到呢 http://www.admin10000.com/document/4711.html
- python学习笔记(matplotlib下载安装)
最近博主在找工作换新环境.昨天电话面试中问到python中threading模块进行接口性能测试的时候.如何生成性能测试报告 我现在还停留在打印在屏幕中.所以今天想着是否可以生成相应的性能测试报告 首 ...
- Qt DLL总结
(转自:http://qimo601.iteye.com/blog/1397936) QT动态链接库的调用方法,主要包括: 1.显式链接DLL,调用DLL的全局函数,采用Qt的QLibrary方法 2 ...
- webpack2配置
详细的配置可以参考官网:https://doc.webpack-china.org/guides/ 一开始做项目时都是直接从组里前辈搭建好的脚手架开始写代码,到后来自己写新项目时又是拷贝之前的工程作为 ...
- notepad++去空格空行技巧
选择视图显示所有字符,替换成空的就行
- 《转》 EJB到底是什么,真的那么神秘吗??
1. 我们不禁要问,什么是"服务集群"?什么是"企业级开发"? 既然说了EJB 是为了"服务集群"和"企业级开发",那么 ...
- ng 变量和常量服务
<!DOCTYPE html> <html ng-app="myApp"> <head lang="en"> <met ...