翼支付门户架构之Spring Security框架介绍
Spring Security3,其前身是“spring的acegi安全系统”。
先来谈一谈Acegi的基础知识,Acegi的架构比较复杂。如果对Web资源进行保护,最好的办法莫过于Filter,要想对方法调用进行保护,最好的办法莫过于AOP。Acegi对Web资源的保护,就是靠Filter实现的。如下图:
一般来说,我们的Filter都是配置在web.xml中,但是Acegi不一样,它在web.xml中配置的只是一个代理,而真正起作用的Filter是作为Bean配置在Spring中。web.xml中的代理依次调用这些Bean,就实现了对Web资源的保护,同时这些Filter作为Bean被Spring管理,所以实现AOP也很简单,真的是一举两得。
Acegi中提供的Filter不少,有十多个,一个一个学起来比较复杂。但是对于我们Web开发者来说,常用的就那么几个,如下图中的被红圈圈标记出来的:
从上到下,它们实现的功能依次是1、制定必须为https连接;2、从Session中提取用户的认证信息;3、退出登录;4、登录;5、记住用户;6、所有的应用必须配置这个Filter。
一般来说,我们写Web应用只需要熟悉这几个Filter就可以了,如果不需要https连接,连第一个也不用熟悉。但是有人肯定会想,这些Filter怎么和我的数据库联系起来呢?不用着急,这些Filter并不直接处理用户的认证,也不直接处理用户的授权,而是把它们交给了认证管理器和决策管理器。如下图:
对于这两种管理器,那也是不需要我们写代码的,Acegi也提供了现成的类。那么大家又奇怪了:又是现成的,那怎么和我的数据库关联起来呢?别着急,其实这两个管理器自己也不做事,认证管理器把任务交给了Provider,而决策管理器则把任务交给了Voter,如下图:
现在我要告诉你们,这里的Provider和Voter也是不需要我们写代码的。不要崩溃,快到目标了。Acegi提供了多个Provider的实现类,如果我们想用数据库来储存用户的认证数据,那么我们就选择DaoAuthenticationProvider。对于Voter,我们一般选择RoleVoter就够用了,它会根据我们配置文件中的设置来决定是否允许某一个用户访问制定的Web资源。
而DaoAuthenticationProvider也是不直接操作数据库的,它把任务委托给了UserDetailService,如下图:
而我们要做的,就是实现这个UserDetailService。图画得不好,大家不要见笑,但是说了这么多总算是引出了我们开发中的关键,那就是我们要实现自己的UserDetailService,它就是连接我们的数据库和Acegi的桥梁。UserDetailService的要求也很简单,只需要一个返回org.springframework.security.userdetails.User对象的loadUserByUsername(String userName)方法。因此,怎么设计数据库都可以,不管我们是用一个表还是两个表还是三个表,也不管我们是用户-授权,还是用户-角色-授权,还是用户-用户组-角色-授权,这些具体的东西Acegi统统不关心,它只关心返回的那个User对象,至于怎么从数据库中读取数据,那就是我们自己的事了。
翼支付门户架构之Spring Security框架介绍相关推荐
- 翼支付门户架构之搭建spring+springmvc+springsecurity框架
1.项目结构如下: 2.pom文件的依赖配置如下: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi= ...
- 翼支付门户架构之使用YUI Compressor优化你的网页
使用YUI Compressor优化你的网页 YUI Compressor是做什么的? 这个小工具主要是用来压缩CSS和JavaScript文件的,当然你觉得可以混淆这些文件里的代码也是可以的,不过我 ...
- 翼支付门户架构之redis安装
一.下载redis 本次部署测试采用的redis版本是redis-2.8.19.tar.gz; 二.安装redis 下载后解压 tar -zxvf redis-2.8.19.tar.gz到任意目录,例 ...
- 翼支付门户架构之redis之RDB和AOF
Redis 持久化: 提供了多种不同级别的持久化方式:一种是RDB,另一种是AOF. RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot). AO ...
- 关于Spring Security框架 关于单点登录sso
1.Spring Security的作用 Spring Security主要解决了认证和授权相关的问题. 认证(Authenticate):验证用户身份,即登录. 授权(Authorize):允许用户 ...
- Spring Security 框架详解
SECURITY Spring Security框架 Spring Security框架主要解决了认证与授权的相关问题. 添加依赖 在Spring Boot项目中,需要使用Spring Securit ...
- 【Spring Security】Spring Security框架详解
文章目录 前言 一.框架概述 Spring Security的架构 Spring Security的主要特点 二.认证 HTTP Basic认证 表单登录 OpenID Connect 三.授权 基于 ...
- spring security框架中在页面通过标签获取用户信息
2019独角兽企业重金招聘Python工程师标准>>> spring security框架中,通过<@sec.authentication property="nam ...
- Spring Security框架
Spring Security框架 关于用户身份认证与授权 Spring Security是用于解决认证与授权的框架. 添加依赖 <!-- Spring Boot Security:处理认证与授 ...
最新文章
- repne scasb 内联实现 strlen
- Oracle之索引和索引碎片问题解决
- 【android】环形进度条实现
- Dotnet core使用JWT认证授权最佳实践(二)
- 量化策略回测唐安奇通道
- 克就克嘛!哪个怕哪个
- java-idea-常用的快捷键
- springboot校园二手交易平台的设计与实现毕业设计源码260839
- 幼儿园数学目标_幼儿园数学区目标
- CentOS 8 修改DNS地址
- webpack打包告警We noticed you‘re using the `useBuiltIns` option without declaring a core-js version.
- oracle函数 isex,求一条sql话语,按条件查询过期的客户信息
- 通过swoole扩展,实现简单的匿名聊天室功能
- 小程序商品数据对象累加加入购物车缓存导致的数组嵌套在上一层数组中的问题
- 商品后台管理系统(项目一)
- int / long / long int / long long / long long int
- (二)如何识别骗子(酒托、咖啡托、各种托)
- 5-35V输入升压8-100V各种升压解决方案 大功率300W
- 图纸加密彰显企业的产权意识
- Y22M12D05_1687_从仓库到码头运输箱子
热门文章
- 只要是倒霉,起卦就能看出来
- ofo4.0时代羽化移动物联网应用 以科技创新重塑智慧出行
- Android——直播推流SDK
- PHP中布尔型类型的英文单词是 ( ),php数据类型之布尔(其实他就是中国易经)...
- Linux系统使用Windows系统字体的方法
- SqlLite数据库
- 交换机与集线器(HUB)抓包上的区别
- android 4g lte,Turn on 4G LTE Settings | 4G Mobile Network | csl
- Java私有构造方法
- 在内网环境使用pip离线安装python包