本篇文章主要围绕下面几个问题来深入源码: 用户认证流程 认证结果如何在多个请求之间共享 获取认证用户信息 一.用户认证流程 上节中提到Spring Security核心就是一系列的过滤器链,当一个请求来的时候,首先要通过过滤器链的校验,校验通过之后才会访问用户各种信息. 这里要说明的是在过滤器的最前端有一个SecurityContextPersistenceFilter,当请求进来和返回的时候都会经过这个过滤器,它主要存放用户的认证信息.这里先简单提一下,后面会详解. 当用户发送登录请求的时候(…
用户认证流程 UsernamePasswordAuthenticationFilter 我们直接来看UsernamePasswordAuthenticationFilter类, public class UsernamePasswordAuthenticationFilter extends AbstractAuthenticationProcessingFilter { public Authentication attemptAuthentication(HttpServletRequest…
在 Spring Security 中基于表单的认证模式,默认就是密码帐号登录认证,那么对于短信验证码+登录的方式,Spring Security 没有现成的接口可以使用,所以需要自己的封装一个类似的认证过滤器和认证处理器实现短信认证. 短信验证码认证 验证码对象类设计 和图片验证码一样,需要自己封装一个验证码对象,用来生成手机验证码并发送给手机.因为图片验证码和手机验证码对象的区别就在于前者多了个图片对象,所以两者共同部分抽象出来可以设计成一个ValidateCode类,这个类里面只存放验证码…
整体实现逻辑 前端在登录页面时,自动从后台获取最新的验证码图片 服务器接收获取生成验证码请求,生成验证码和对应的图片,图片响应回前端,验证码保存一份到服务器的 session 中 前端用户登录时携带当前验证码 服务器校验验证码是否合法(验证码存在并未过期),继续后续的用户名和密码校验逻辑 通过一个时序图来表述如下图,图中细化了一下各个控制器和过滤器之间的功能职责,还不是很正规,只为了更好表达上述的流程描述,所以读者们将就一下: 时序图 plantUML 代码 plantUML 的使用教程请移步至…
官方文档参考,5.1.2 中文参考文档,4.1 中文参考文档,4.1 官方文档中文翻译与源码解读 SpringSecurity 核心功能: 认证(你是谁) 授权(你能干什么) 攻击防护(防止伪造身份) 简单的开始 pom 依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&q…
记住我功能的基本原理 当用户登录发起认证请求时,会通过UsernamePasswordAuthenticationFilter进行用户认证,认证成功之后,SpringSecurity 调用前期配置好的记住我功能,实际是调用了RememberMeService接口,其接口的实现类会将用户的信息生成Token并将它写入 response 的Cookie中,在写入的同时,内部的TokenRepositoryTokenRepository会将这份Token再存入数据库一份. 当用户再次访问服务器资源的时…
原文链接: http://www.blogjava.net/redhatlinux/archive/2008/08/20/223148.html http://www.blogjava.net/redhatlinux/archive/2008/09/01/226010.html [总结-含源码]Spring Security学习总结二 Posted on 2008-09-01 10:08 tangtb 阅读(9518) 评论(12)  编辑  收藏 所属分类: Spring .Spring Se…
学习的博客:http://elf8848.iteye.com/blog/875830/ 我项目中所用的版本:4.2.0.博客的时间比较早,11年的,学习的是Spring3 MVC.不知道版本上有没有变化比较大的功能. spring mvc教程(二)核心流程及配置详解 1.核心流程图(基于注解方式) http请求->DispatcherServlet --> DefaultAnnotationHandlerMapping --> 多个拦截器 --> Controller -->…
Ext.Net学习笔记22:Ext.Net Tree 用法详解 上面的图片是一个简单的树,使用Ext.Net来创建这样的树结构非常简单,代码如下: <ext:TreePanel runat="server"> <Root> <ext:Node Text="根节点" Expanded="true"> <Children> <ext:Node Text="节点1" Expand…
Ext.Net学习笔记23:Ext.Net TabPanel用法详解 上面的图片中给出了TabPanel的一个效果图,我们来看一下代码: <ext:TabPanel runat="server" ID="tabpanel1"> <Items> <ext:Panel runat="server" ID="tab1" Title="Tab1" Html="第一个Tab&q…
spring boot 加载web容器tomcat流程源码分析 我本地的springboot版本是2.5.1,后面的分析都是基于这个版本 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.1</version> <relativePa…
对比两种承载认证信息的方式: session vs token token验证方案: session验证方案: session即会话是将用户信息保存在服务端,根据请求携带的session_id,从服务端存储(通常是redis)里提取出session.token即令牌是将用户信息保存在请求中,不过是加密后的值,在服务端需要对token进行解密,从而提取用户信息. 浅尝JWT(JSON WEB TOKEN) JWT的使用场景: authentication: 这是JWT最常见的应用场景.当用户登陆之…
Spring Web Security是Java web开发领域的一个认证(Authentication)/授权(Authorisation)框架,基于Servlet技术,更确切的说是基于Servlet的Filter技术.因此,在学习Spring Web Security之前,有必要先对Servlet Filter的工作机制做个介绍. 注:Spring Security本身并不只是针对web的,但本文讲的主要是其在web开发中的使用,因此下文提到Spring Security时主要指Spring…
之前提到过认证后怎么存放用户信息,令牌token是一种方式,session是另一种方式,这里介绍使用spring session data redis存储httpSession. 添加了以上依赖后,我们可以创建Spring Boot 配置.Spring Boot 已经做好了大部分的配置工作,我们只需要做如下配置: spring.session.store-type=redis # Session store type. Spring Boot 会自动添加一个@EnableRedisHttpSes…
Spring Boot入门第二篇 第一天的详见:https://www.cnblogs.com/LBJLAKERS/p/12001253.html 同样是新建一个pring Initializer快速创建Spring Boot项目. 在resource的目录下新建两个application-dev.properties/application-pro.properties属性文件分别代表开发环境和生产环境.如图: 指定使用的属性配置文件 一:通过默认的application.properties…
一.使用Spring Security 1.在pom 文件中添加Spring Security的依赖. <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> <version>${spring.version}</version> </dependen…
认证和权限控制 AuthenticationManager是认证的主要接口,它只有一个authenticate方法,可以做3件事情. 返回一个认证信息(Authentication),表示认证成功 抛一个AuthenticationException异常,如果认证不成功 返回null,如果不能确定是否认证成功 最常见的AuthenticationManager实现是ProviderManager(经常看到一些AuthenticationProvider实例).有时候应用的保护资源有逻辑分组,每组…
配置自定义的用户存储 我们在 SecurityConfig 的配置类中 重写了 configure(AuthenticationManagerBuilder auth) 方法,我们可以通过 AuthenticationManagerBuilder 这个构造器类使用不同的用户存储,如 inMemoryAuthentication()基于内存的,jdbcAuthentication()基于关系型数据库的. 通过查看AuthenticationManagerBuilder的源码可以发现里面还有一个方法…
web.xml配置委托代理filter,filter-name默认与filter bean的名字保持一致. <filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-…
位于过滤器顶端,第一个起作用的过滤器.SecurityContextPersistenceFilter 在执行其他过滤器之前,率先判断用户的session中是否已经存在一个SecurityContext了.如果存在,就把SecurityContext拿出来,放到SecurityContextHolder中,供Spring Security的其他部分使用.如果不存在,就创建一个SecurityContext出来,还是放到SecurityContextHolder中,供Spring Security…
Spring Security使用一系列过滤器处理用户请求,下面是spring-security.xml配置文件. <?xml version="1.0" encoding="UTF-8"?> <beans:beans xmlns="http://www.springframework.org/schema/security" xmlns:beans="http://www.springframework.org/sc…
一:任务 1.任务 认证处理流程说明 认证结果如何在多个请求之间共享 获取认证用户信息 二:认证处理流程处理说明 1.流程图 这里只是一个登陆到登陆的认证部分的流程图. 2.流程解释 3.断点跟踪 页面登录,进入这里. 通过username与password得到一个UsernamePasswordAuthenticationToken. 看看这个UsernameOasswordAuthenticationToken对象的类图. 这里全是类,然后我们看到父类AbstractAuthenticati…
本节学习的命令:/etc/passwd,/etc/shadow,/etc/group文件详解 本节学习的技能: 安全上下文 文件与目录的权限管理 影子命令 用户,用户组类别详解 /etc/passwd,/etc/shadow,/etc/group文件详解,及用户密码的加密方法 添加用户 与各个层面管理相关的命令(用户管理,组管理,权限管理) 用户.组(权限的集合).权限 安全上下文(secure context): 权限:   r, w, x 文件:     r:可读,可以使用类似cat等命令查…
1. 虚拟机管理操作 attach-device 从XML文件附加设备 attach-disk 附加磁盘设备 attach-interface 连接网络接口 autostart 自动启动一个域 blkdeviotune 设置或查询块设备I/O调整参数. blkiotune 获取或设置blkio参数 blockcommit 开始块提交操作. blockcopy 开始一个块复制操作. blockjob 管理活动的块操作 blockpull 从其背景图像填充磁盘. blockresize 调整域的块设…
UsernamePasswordAuthenticationFilter用户登录验证过滤器,它继承自AbstractAuthenticationProcessingFilter. 登录处理url默认使用/j_spring_security_check,如果用户请求地址不是要进行用户验证的地址,则不使用这个过滤器拦截处理.用户登录验证则有可能交给rememberMeAuthenticationFilter. 同时提供授权成功处理器AuthenticationSuccessHandler和授权失败处…
此系列博客皆为学习Spring Batch时的一些笔记: Spring Batch的架构 一个Batch Job是指一系列有序的Step的集合,它们作为预定义流程的一部分而被执行: Step代表一个自定义的工作单元,它是Job的主要构件块:每一个Step由三部分组成:ItemReader.ItemProcessor.ItemWriter:这三个部分将执行在每一条被处理的记录上,ItemReader读取每一条记录,然后传递给ItemProcessor处理,最后交给ItemWriter做持久化:It…
一.必须将项目打包成war包 <packaging>war</packaging> 二.pom.xml加入依赖包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency> <!--jsp支持--><dependenc…
Mybatis集成 Spring Boot中的JPA部分默认是使用的hibernate,而如果想使用Mybatis的话就需要自己做一些配置.使用方式有两种,第一种是Mybatis官方提供的 mybatis-spring-boot-starter ,第二种是类似 mybatis-spring的方式,需要自己写一些代码.但是可以更方便地控制Mybatis的各项配置. mybatis-spring-boot-starter 这种方式只需要在application.properties中配置相关的Myb…
Ribbon是Netflix发布的负载均衡器,它有助于控制HTTP和TCP的客户端的行为.为Ribbon配置服务提供者地址后,Ribbon就可基于某种负载均衡算法,自动地帮助服务消费者去请求.Ribbon默认为我们提供了很多负载均衡算法,例如轮询.随机等.当然,我们也可为Ribbon实现自定义的负载均衡算法.在Spring Cloud中,当Ribbon与Eureka配合使用时,Ribbon可自动从Eureka Server获取服务提供者地址列表,并基于负载均衡算法,请求其中一个服务提供者实例.展…
Spring对ADO.NET也提供了支持,依赖与程序集Spring.Data.dll IDbProvider IDbProvider定义了数据访问提供器的基础,配置如下 <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <sectionGroup name="spring"> <section na…