Spring Security学习笔记(一)
认证和权限控制
AuthenticationManager是认证的主要接口,它只有一个authenticate方法,可以做3件事情。

- 返回一个认证信息(Authentication),表示认证成功
- 抛一个AuthenticationException异常,如果认证不成功
- 返回null,如果不能确定是否认证成功
最常见的AuthenticationManager实现是ProviderManager(经常看到一些AuthenticationProvider实例)。有时候应用的保护资源有逻辑分组,每组都有自己的认证方式,也就是说分别有各自的ProviderManager。他们共享一个parent。

@Configuration
public class ApplicationSecurity extends WebSecurityConfigurerAdapter {
... // web stuff here
@Autowired
public initialize(AuthenticationManagerBuilder builder, DataSource dataSource) {builder.jdbcAuthentication().dataSource(dataSource).withUser("dave")
.password("secret").roles("USER");
}}
如果AuthenticationManagerBuilder以autowired方式生成实例,那就是创建了一个global/parent的 AuthenticationManager实例。
授权(Authorization)或权限控制(Access Control)
一旦认证成功,我们继而可以进行权限控制。
web security(网络安全)
web层面的spring security是基于Filters Servlet。

客户端发送一个请求到app, 容器根据请求url决定使用哪些filters。通常,一个servlet可以处理一个请求,因此filters是顺序执行的。filter的顺序很重要,Spring Boot实用两种机制来处理filter的顺序。
- @Bean的Filter可以有@Order声明或者实现Ordered。
- 成为一个已经有order的FilterRegistrationBean的一部分。
spring security在filter chain中作为一个单独的filter,它实际的类型是FilterChainProxy(是一系列的Filter构成的)。

FilterChainProxy通过filters chain实现所有security逻辑。所有的filter都implement Servlet Spec的Filter 接口。
请求的匹配规则
一个security filter chain(WebSecurityConfigurerAdapter)有一个请求matcher用来决定filter规则是否应用到该请求。一旦有一个特定的filter chain,其他的filter chain就不work了。一个filter chain你可以定义多种规则。

- java config方式配置security filter chain。以global(@Autowired)的方式生成一个AuthenticationManager实例,该实例为自定义的AuthenticationManager,即UsernameAndPasswordAuthenticationProvider的一个实例。该自定义的UsernameAndPasswordAuthenticationProvider主要实现一个自定义的authentication方法。
- 然后在spring filter chain添加一个自定义的filter,该filter处理主要的认证过程。
- 该filter主要干了两件事:
- 将http request的请求body的值,转为AuthenticationTocken。
- 然后AuthenticationManager(这里是UsernameAndPasswordAuthenticationProvider)的authentication方法处理认证逻辑。

- UsernameAndPasswordAuthenticationProvider的authentication方法具体实现:

这里注意support方法默认返回false,这样就不会掉用自定义的authentication方法。需要逻辑判断调用条件。
这样就使用spring security实现了一个简单的自定义authentication策略的认证流程。
代码地址:
https://github.com/Rying/twitter-clone.git
Spring Security学习笔记(一)的更多相关文章
- SpringBoot + Spring Security 学习笔记(五)实现短信验证码+登录功能
在 Spring Security 中基于表单的认证模式,默认就是密码帐号登录认证,那么对于短信验证码+登录的方式,Spring Security 没有现成的接口可以使用,所以需要自己的封装一个类似的 ...
- SpringBoot + Spring Security 学习笔记(三)实现图片验证码认证
整体实现逻辑 前端在登录页面时,自动从后台获取最新的验证码图片 服务器接收获取生成验证码请求,生成验证码和对应的图片,图片响应回前端,验证码保存一份到服务器的 session 中 前端用户登录时携带当 ...
- SpringBoot + Spring Security 学习笔记(二)安全认证流程源码详解
用户认证流程 UsernamePasswordAuthenticationFilter 我们直接来看UsernamePasswordAuthenticationFilter类, public clas ...
- Spring Security学习笔记
Spring Web Security是Java web开发领域的一个认证(Authentication)/授权(Authorisation)框架,基于Servlet技术,更确切的说是基于Servle ...
- Spring Security学习笔记一
一.使用Spring Security 1.在pom 文件中添加Spring Security的依赖. <dependency> <groupId>org.springfram ...
- SpringBoot + Spring Security 学习笔记(一)自定义基本使用及个性化登录配置
官方文档参考,5.1.2 中文参考文档,4.1 中文参考文档,4.1 官方文档中文翻译与源码解读 SpringSecurity 核心功能: 认证(你是谁) 授权(你能干什么) 攻击防护(防止伪造身份) ...
- Spring Security学习笔记(三)
之前提到过认证后怎么存放用户信息,令牌token是一种方式,session是另一种方式,这里介绍使用spring session data redis存储httpSession. 添加了以上依赖后,我 ...
- Spring security学习笔记(二)
对比两种承载认证信息的方式: session vs token token验证方案: session验证方案: session即会话是将用户信息保存在服务端,根据请求携带的session_id,从服务 ...
- Spring Security 学习笔记-securityContext过滤器过滤链学习
web.xml配置委托代理filter,filter-name默认与filter bean的名字保持一致. <filter> <filter-name>springSecuri ...
随机推荐
- qt 拷贝文件设置进度条
/** * @brief FuncModuleWin::copyFile * @param fromFIleName 优盘里面的文件 * @param toFileName 拷贝到/bin里面的启动文 ...
- python 多进程数据交互及共享
多线程和多进程最大的不同在于,多进程中,同一个变量,各自有一份拷贝存在于每个进程中,互不影响,而多线程中,所有变量都由所有线程共享,所以,任何一个变量都可以被任何一个线程修改,因此,线程之间共享数据最 ...
- C#启动服务
启动服务的方法有很多种,简单的cmd下dos命名,手动启动,还有C#代码启动. 我们要实现的功能: 判断是否安装 是否启动 启动服务 关闭服务 我封装了有关服务的代码,如下: using System ...
- MySQL案例之Timestamp和Datetime
mysql数据库常用的时间类型有timestamp和datetime,两者主要区别是占用存储空间长度不一致.可存储的时间也有限制,但针对不同版本下,timestamp字段类型的设置需要慎重,因为不注意 ...
- mongoDb 命令
1.显示MongoDB的服务器统计:db.stats() 2.创建数据库:use dbname 3.删除数据库:db.dropDatabase() 4.检查当前选择的数据库:db 5.检查数据库列表: ...
- Ubuntu 下安装apache+PHP
1.安装apache2 sudo apt-get install apache2 运行如下命令重启:sudo /etc/init.d/apache2 restart 在浏览器里输入http://loc ...
- 使用BAPISDORDER_GETDETAILEDLIST创建S/4HANA的Outbound Delivery
要在S/4HANA里创建Outbound Delivery,首先要具有一个销售订单,ID为376,通过事务码VA03查看. 只用61行代码就能实现基于这个Sales Order去创建对应的outbou ...
- Graph 133. Clone Graph in three ways(bfs, dfs, bfs(recursive))
Clone an undirected graph. Each node in the graph contains a label and a list of its neighbors. OJ's ...
- PHP5.5的新特性
看了@轩脉刃 今天出炉的PHP 5.5 新特性.不过没有翻译全,我这里稍微补充下,整理成完整的一篇:) 原文:http://www.php.net/manual/zh/migration55.new- ...
- hdu-2619 Love you Ten thousand years
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2619 题目大意: 求出小于n的数的个数,满足ki mod n,1≤i≤n是模n的完全剩余系 解题思路 ...