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=" ...
随机推荐
- 一篇看懂++i i++
/** * @Title:Test03 * @Description: * @author Crazy-ZJ * @data 2017年9月28日上午9:38:00 * @book 疯狂java讲义( ...
- JavaWeb -- Struts 数据传输:OGNL和类型转换
1. 数据传输:OGNL和类型转换 OGNL和struts2 OGNL:Object-Graph Navigation Language. OGNL是集成进struts框架中比较强大的技术有助于数据传 ...
- 回溯和DFS效率分析
回溯和DFS效率分析 一.心得 多组数据记得初始化 两组样例,找圆点点的个数 6 9 ....#. .....# ...... ...... ...... ...... ...... #@...# . ...
- iRed邮箱使用情况
iRedAdmin-Pro 在域名的用户列表里直接显示了邮箱使用情况的百分比,并有一个细小的进度条以不同颜色标示百分比情况.用户的邮箱限额定义在 mailbox.quota,当前使用情况定义在 use ...
- [转载]java在线比较两个word文件
一.项目背景 开发文档管理系统或OA办公系统的时候,实现在线处理word文档的功能比较容易,但是也经常会有客户提出文档版本管理的需求,这就需要同时在线打开两个word文件,对比两个不同版本的word文 ...
- nivicat premium连接阿里云数据库
1.首先打开Navicat,文件>新建连接>MySQL连接,其他的如一图所示 其中: 连接名:自己取一个名字 主机名:填写mysql的地址 用户名:mysql的登录的用户名 密码:登录的密 ...
- 说说geotools中坐标转换那点事
概述: 本文说说geotools中坐标转换的那点事情,以WGS84和web墨卡托相互转换为例. 效果: 转换前 转换后 单个Geometry转换 实现代码: package com.lzugis.ge ...
- pg确定一张表最后被使用的时间
create or replace function table_file_access_info( IN schemaname text,IN tablename text,OUT last_acc ...
- Linux SSH的命令详解[转]
http://www.linuxidc.com/Linux/2008-02/11055.htm前一阵远程维护Linux服务器,使用的是SSH,传说中的secure shell. 登陆:ssh [hos ...
- Go语言使用匿名结构体解析JSON数据
手机拥有屏幕.电池.指纹识别等信息,将这些信息填充为 JSON 格式的数据.如果需要选择性地分离 JSON 中的数据则较为麻烦.Go 语言中的匿名结构体可以方便地完成这个操作. 首先给出完整的代码,然 ...