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 浅谈用户验证机制的更多相关文章

  1. Spring Security 入门—内存用户验证

    简介 作为 Spring 全家桶组件之一,Spring Security 是一个提供安全机制的组件,它主要解决两个问题: 认证:验证用户名和密码: 授权:对于不同的 URL 权限不一样,只有当认证的用 ...

  2. Spring security 获取当前用户

    spring security中当前用户信息 1:如果在jsp页面中获取可以使用spring security的标签库 在页面中引入标签   1 <%@ taglib prefix=" ...

  3. Spring Security默认的用户登录表单 页面源代码

    Spring Security默认的用户登录表单 页面源代码 <html><head><title>Login Page</title></hea ...

  4. spring security实现记录用户登录时间等信息

    目录 spring security实现记录用户登录时间等信息 一.原理分析 二.实现方式 2.1 自定义AuthenticationSuccessHandler实现类 2.2 在spring-sec ...

  5. 详解Spring Security的HttpBasic登录验证模式

    一.HttpBasic模式的应用场景 HttpBasic登录验证模式是Spring Security实现登录验证最简单的一种方式,也可以说是最简陋的一种方式.它的目的并不是保障登录验证的绝对安全,而是 ...

  6. Spring Security实现禁止用户重复登陆(配置及原理)

    系统使用了Spring Security做权限管理,现在对于系统的用户,需要改动配置,实现无法多地登陆.   一.SpringMVC项目,配置如下: 首先在修改Security相关的XML,我这里是s ...

  7. 深入Spring Security魔幻山谷-获取认证机制核心原理讲解(新版)

    文/朱季谦 本文基于Springboot+Vue+Spring Security框架而写的原创学习笔记,demo代码参考<Spring Boot+Spring Cloud+Vue+Element ...

  8. spring security LDAP获取用户信息

    很多企业内部使用LDAP保存用户信息,这章我们来看一下如何从LDAP中获取Spring Security所需的用户信息. 首先在pom.xml中添加ldap所需的依赖. <dependency& ...

  9. spring security使用数据库管理用户权限

    <authentication-provider> <user-service> <user name="admin" password=" ...

随机推荐

  1. 一篇看懂++i i++

    /** * @Title:Test03 * @Description: * @author Crazy-ZJ * @data 2017年9月28日上午9:38:00 * @book 疯狂java讲义( ...

  2. JavaWeb -- Struts 数据传输:OGNL和类型转换

    1. 数据传输:OGNL和类型转换 OGNL和struts2 OGNL:Object-Graph Navigation Language. OGNL是集成进struts框架中比较强大的技术有助于数据传 ...

  3. 回溯和DFS效率分析

    回溯和DFS效率分析 一.心得 多组数据记得初始化 两组样例,找圆点点的个数 6 9 ....#. .....# ...... ...... ...... ...... ...... #@...# . ...

  4. iRed邮箱使用情况

    iRedAdmin-Pro 在域名的用户列表里直接显示了邮箱使用情况的百分比,并有一个细小的进度条以不同颜色标示百分比情况.用户的邮箱限额定义在 mailbox.quota,当前使用情况定义在 use ...

  5. [转载]java在线比较两个word文件

    一.项目背景 开发文档管理系统或OA办公系统的时候,实现在线处理word文档的功能比较容易,但是也经常会有客户提出文档版本管理的需求,这就需要同时在线打开两个word文件,对比两个不同版本的word文 ...

  6. nivicat premium连接阿里云数据库

    1.首先打开Navicat,文件>新建连接>MySQL连接,其他的如一图所示 其中: 连接名:自己取一个名字 主机名:填写mysql的地址 用户名:mysql的登录的用户名 密码:登录的密 ...

  7. 说说geotools中坐标转换那点事

    概述: 本文说说geotools中坐标转换的那点事情,以WGS84和web墨卡托相互转换为例. 效果: 转换前 转换后 单个Geometry转换 实现代码: package com.lzugis.ge ...

  8. pg确定一张表最后被使用的时间

    create or replace function table_file_access_info( IN schemaname text,IN tablename text,OUT last_acc ...

  9. Linux SSH的命令详解[转]

    http://www.linuxidc.com/Linux/2008-02/11055.htm前一阵远程维护Linux服务器,使用的是SSH,传说中的secure shell. 登陆:ssh [hos ...

  10. Go语言使用匿名结构体解析JSON数据

    手机拥有屏幕.电池.指纹识别等信息,将这些信息填充为 JSON 格式的数据.如果需要选择性地分离 JSON 中的数据则较为麻烦.Go 语言中的匿名结构体可以方便地完成这个操作. 首先给出完整的代码,然 ...