Spring Security 学习总结
Spring Security
Spring Security是基于Spring提供声明式安全保护的安全性框架。Spring Security提供了完整的安全性解决方案,能够在Web请求级别和方法调用级别处理身份认证和授权。
Spring Security从两个角度来解决安全性问题:
- 使用Servlet规范中的Filter保护Web请求并限制URL级别的访问;
- 使用Spring AOP保护方法调用——借助于动态代理和使用通知,确保只有具备适当权限的用户才能访问安全保护的方法。
Spring Security被分为了11个模块:
模块 | 描述 |
ACL(access control list) | 支持通过访问控制列表(ACL)为域对象提供安全性 |
切面(Aspects) | 当使用Spring Security注解时,会使用基于AspectJ的切面,而非标准的AOP |
CAS(Central Authentication Service)客户端 | 提供与Jasig的中心认证服务(CAS)进行集成的功能 |
配置(Configuratiion)* | 包含通过XML和Java配置Spring Security的功能支持 |
核心(Core) * | 提供Spring Security基本库 |
加密(Cryptography) | 提供了加密和密码编码的功能 |
LDAP | 支持基于LDAP进行认证 |
OpenID | 支持使用OpenID进行集中式认证 |
Remoting | 提供了对Spring Remoting的支持 |
标签库(Tag Library) | Spring Security的JSP标签库 |
Web | 提供了Spring Security基于Filter的Web安全性支持 |
过滤Web请求
Spring Security基于DelegatingFilterProxy实现其安全性需要的过滤功能。DelegatingFilterProxy是一个特殊的Servlet Filter,主要将工作委托给一个javax.servlet.Filter实现类,实现类将作为一个bean注册在Spring应用的上下文中。
Java配置方式,配置DelegatingFilterProxy:
public class SecurityWebInitializer extends
AbstractSecurityWebApplicationInitializer {}
AbstractSecurityWebApplicationInitializer 实现了 WebApplicationInitializer ,因此将被Spring容器并注册 DelegatingFilterProxy。实现类可以重载抽象类中的appendFilters()或insertFilters()方法来注册自己选择的Filter,但如果只是注册DelegatingFilterProxy的话,不需要重载任何方法。
完成配置DelegatingFilterProxy后,它就会拦截发往应用中的请求,并将请求委托给ID为springSecurityFilterChain的Bean。
springSecurityFilterChain本身是另一个特殊的Filter,也叫 FilterChainProxy。它可以链接任意一个或多个其他的Filter。Spring Security依赖一系列Servlet Filter来提供不同的安全特性。实际开发中,只需要显式声明springSecurityFilterChain以及它所链接的Filter即可。启动Web安全性时将自动创建。 简单的安全性配置--基于Java配置
@Configuration
@EnableWebSecurity // 启用Web安全性
public class SecurityConfig extends WebSecurityConfigurerAdapter { /**
* 简单的默认配置:指定该如何保护HTTP请求
* @param http
* @throws Exception
*/
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin().and()
.httpBasic();
} }
@EnableWebSecurity注解将会启用Web安全功能,ps:Spring Security必须配置在一个实现了WebSecurityConfigurer的bean中,或者扩展 WebSecurityConfigurerAdapter 。
具体的Web安全细节,将通过重写WebSecurityConfigurerAdapter 中的一个或多个方法来实现,如其中的三个configure()方法来配置Web安全性,具体通过传递的参数设置行为。
方法 | 描述 |
configure(WebSecurity) | 通过重写,配置Spring Security的Filter链 |
configure(HttpSecurity) | 通过重写,配置如何通过拦截器保护请求 |
configure(AuthenticationManagerBuilder) | 通过重写,配置user-detail服务 |
示例代码中进行了简单的默认配置,指定如何保护HTTP请求,以及客户端认证用户的方案。调用authorizeRequests()和anyRequest().authenticated()就会要求所有进入应用的HTTP请求都要进行认证。formLogin()和httpBasic()则配置了对表单登录和HTTP Basic方式的支持。
注意:因为没有重写configure(AuthenticationManagerBuilder)方法,所以没有用户存储支撑认证过程。进而所有的请求都要认证,且没人可成功登陆。
后续需要的配置如下:
- 配置用户存储
- 指定具体需要认证的请求及所需权限
- 提供自定义登陆页面
- 基于安全限制,设置选择性地在Web视图上显示特定的内容
user-detail服务 **
优势:内置了多种常见的用户存储场景,如内存、关系型数据库以及LDAP,能够基于各种数据存储来认证用户。
Spring Security 学习总结的更多相关文章
- Spring security 学习 (自助者,天助之!)
自己努力,何必要强颜欢笑的求助别人呢? 手心向下不求人! Spring security学习有进展哦: 哈哈! 1.页面都是动态生产的吧! 2.设置权限: a:pom.xml配置jar包 b:cr ...
- SpringBoot + Spring Security 学习笔记(五)实现短信验证码+登录功能
在 Spring Security 中基于表单的认证模式,默认就是密码帐号登录认证,那么对于短信验证码+登录的方式,Spring Security 没有现成的接口可以使用,所以需要自己的封装一个类似的 ...
- SpringBoot + Spring Security 学习笔记(三)实现图片验证码认证
整体实现逻辑 前端在登录页面时,自动从后台获取最新的验证码图片 服务器接收获取生成验证码请求,生成验证码和对应的图片,图片响应回前端,验证码保存一份到服务器的 session 中 前端用户登录时携带当 ...
- [转]Spring Security学习总结二
原文链接: http://www.blogjava.net/redhatlinux/archive/2008/08/20/223148.html http://www.blogjava.net/red ...
- [转]Spring Security学习总结一
[总结-含源码]Spring Security学习总结一(补命名空间配置) Posted on 2008-08-20 10:25 tangtb 阅读(43111) 评论(27) 编辑 收藏 所属分 ...
- spring security 学习资料
spring security 学习资料 网址 Spring Security 文档参考手册中文版 https://springcloud.cc/spring-security.html
- Spring Security学习笔记
Spring Web Security是Java web开发领域的一个认证(Authentication)/授权(Authorisation)框架,基于Servlet技术,更确切的说是基于Servle ...
- SpringBoot + Spring Security 学习笔记(二)安全认证流程源码详解
用户认证流程 UsernamePasswordAuthenticationFilter 我们直接来看UsernamePasswordAuthenticationFilter类, public clas ...
- spring security 学习一
1.配置基本的springboot web项目,加入security5依赖,启动项目 浏览器访问,即可出现一个默认的登录页面 2.什么都没有配置 登录页面哪里来的 一般不知从何入手,就看官方文档里是如 ...
- spring security学习总结
这几天一直在学习spring security的相关知识.逛各大论坛,看相关api与教学视频,获益良多! 简介 Spring Security是为基于Spring的企业应用系统提供声明式的安全访问控制 ...
随机推荐
- Spring Boot2.0 整合 Kafka
Kafka 概述 Apache Kafka 是一个分布式流处理平台,用于构建实时的数据管道和流式的应用.它可以让你发布和订阅流式的记录,可以储存流式的记录,并且有较好的容错性,可以在流式记录产生时就进 ...
- IdentityServer4 实战文档
一.前言 IdentityServer4实战这个系列主要介绍一些在IdentityServer4(后文称:ids4),在实际使用过程中容易出现的问题,以及使用技巧,不定期更新,谢谢大家关注.这些问题. ...
- Item 14: 如果函数不会抛出异常就把它们声明为noexcept
本文翻译自modern effective C++,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 博客已经迁移到这里啦 在C++98中,异常规范(exception specificat ...
- 腾讯发布新版前端组件框架 Omi,全面拥抱 Web Components
Omi - 合一 下一代 Web 框架,去万物糟粕,合精华为一 → https://github.com/Tencent/omi 特性 4KB 的代码尺寸,比小更小 顺势而为,顺从浏览器的发展和 AP ...
- RabbitMQ 惰性队列Lazy Queue
RabbitMQ 队列分为几种类型,按照不同维度来分,可以分为排他性队列.普通队列.延迟队列.惰性队列.发布订阅队列等. 今天我们讨论的主角是惰性队列 Lazy Queue.众所周知,队列可以存储消息 ...
- Win10 Anaconda下TensorFlow-GPU环境搭建详细教程(包含CUDA+cuDNN安装过程)
目录 前言 第一步:安装Anaconda 1.下载和安装 2.配置Anaconda环境变量 第二步:安装TensorFlow-GPU 1.创建conda环境 2.激活环境 3.安装tensorflow ...
- 五、xadmin自定义插件2
以导入插件为例说明: 1.在xadmin-->plugins下面新建excel.py文件 2.新建ListExcelImportPlugin类,继承BaseAdminPlugin from xa ...
- Pytorch 初识
文章目录 一个简单的回归网络的例子 再来一个例子 官方教程上图片识别的例子 import torch import torch.nn as nn import torch.nn.functional ...
- iOS蓝牙开发之iBeacon技术
iBeacon组成信息: 1 .UUID(universally unique identifier):一个128位的唯一标识一个或多个Beacon基站为特定类型或特定的组织. 2. Major:一个 ...
- C++诡异异常处理
虽然现在C++头文件允许只编译一次,但仍然可能因为头文件引用引起问题,当出现:“构造函数初始值设定项列表只能在构造函数定义中使用”,可能的原因是头文件互相引用导致的. 出现“error LNK1120 ...