Spring Secrity 简介及基本配置
2016-12-07 17:38:54 最后更新: 2016-12-08 17:27:40 访问数量:2258
2016-12-07 17:38:54 最后更新: 2016-12-08 17:27:40 访问数量:2258
上一篇日志中,我们介绍了 org.springframework.web.filter 包中提供的过滤器
本篇日志中我们来介绍其中的一个特殊的过滤器 -- 委派过滤器代理(DelegatingFilterProxy)
DelegatingFilterProxy 虽然在 org.springframework.web.filter 包中,但是他其实并不算是一个过滤器,它的原型是 FilterToBeanProxy,即将 Filter 作为 spring 的 bean,由 spring 来管理
在我们的应用中,登录验证是最常用的功能,Spring Security 利用 DelegatingFilterProxy 及一系列 Filter 为我们提供了高度可定制化的请求验证机制,以及用户、角色、权限的抽象机制,来完成对我们的请求的验证
Spring3.2 提供了 Spring Security 安全性框架为应用程序提供声明式安全保护,主要为 web 请求级别和方法调用级别提供身份认证和授权
Spring Security 充分利用了依赖人注入和面向切面技术来提供安全性保证
Spring Security 分为 11 个模块:
模块 | 描述 |
访问控制列表 (ACL) | 支持通过访问控制列表为域对象提供安全性 |
切面 (Aspects) | 当使用 Spring Security 时使用 AspectJ 切面而不是默认的标准 Spring AOP |
CAS 客户端 (CAS client) | 提供与 Jasig 的中心认证服务(CAS)进行集成的功能 |
配置 (config) | 包含通过 XML 和 java 配置 Spring Security 的功能支持 |
核心 (core) | 提供 Spring Security 基本库 |
加密 (Cryptography) | 提供加密和密码编码功能 |
LDAP | 支持基于 LDAP 进行认证 |
OpenId | 支持使用 OpenID 进行集中式认证 |
Remoting | 提供了对 Spring Remoting 的支持 |
标签库 (Tag Libary) | Spring Security 的 JSP 标准库 |
Web | 提供了 Spring Security 基于 Filter 的 Web 安全性支持 |
应用程序通常至少要包含 Core 和 Config 两个模块:
委派过滤器代理 DelegatingFilterProxy 是一个特殊的 Servlet Filter,他的工作并不多,只是将工作委托给 javax.servlet.Filter 实现类
因此,我们只需要配置 DelegatingFilterProxy 即可实现借助一系列 Sever Filter 而实现的各种安全性功能
如果 Servlet 配置在 XML 中,那么可以为他添加 filter:
Spring 提供了 AbstractSecurityWebApplicationInitializer,他实现了 WebApplicationInitializer,因此 Spring 会自动发现他,他实现了在 web 容器中注册 DelegatingFilterProxy,并创建一个名为 springSecurityFilterChain 的 bean,我们无需进行任何额外配置,DelegatingFilterProxy 都会拦截发往应用的请求委托给这个 bean
@EnableWebSecurity 是 Spring Security 最简单的启用方式,他必须配置在实现了 WebSecurityConfigurer 的 bean 上,最简单的方式是扩展 WebSecurityConfigurerAdapter 类:
通过复写 WebSecurityConfigurerAdapter 重载的三个 configure 方法,可以实现对各个请求不同的拦截规则:
方法 | 描述 |
configure(WebSecurity) | 配置Spring Security的Filter链 |
configure(HttpSecurity) | 配置如何通过拦截器保护请求 |
configure(AuthenticationManagerBuilder) | 配置 user-detail 服务 |
默认配置会拦截所有请求,相当于:
但是默认的配置下,所有请求都会被认证,但我们没有用户信息用来认证请求,所以所有的请求都会登录失败
为了让 Spring Security 满足我们应用的需求,我们需要进行如下配置:
欢迎关注微信公众号,以技术为主,涉及历史、人文等多领域的学习与感悟,每周三到七篇推文,只有全部原创,只有干货没有鸡汤