Spring Secrity 简介及基本配置

2016-12-07 17:38:54   最后更新: 2016-12-08 17:27:40   访问数量:385




上一篇日志中,我们介绍了 org.springframework.web.filter 包中提供的过滤器

SpringMVC 提供的 Filter 类简介

本篇日志中我们来介绍其中的一个特殊的过滤器 -- 委派过滤器代理(DelegatingFilterProxy)

DelegatingFilterProxy 虽然在 org.springframework.web.filter 包中,但是他其实并不算是一个过滤器,它的原型是 FilterToBeanProxy,即将 Filter 作为 spring 的 bean,由 spring 来管理

在我们的应用中,登录验证是最常用的功能,Spring Security 利用 DelegatingFilterProxy 及一系列 Filter 为我们提供了高度可定制化的请求验证机制,以及用户、角色、权限的抽象机制,来完成对我们的请求的验证

 

Spring3.2 提供了 Spring Security 安全性框架为应用程序提供声明式安全保护,主要为 web 请求级别和方法调用级别提供身份认证和授权

Spring Security 充分利用了依赖人注入和面向切面技术来提供安全性保证

 

maven 依赖

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 两个模块:

<dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-config</artifactId> <version>4.2.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-web</artifactId> <version>4.2.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-core</artifactId> <version>4.2.0.RELEASE</version> </dependency>

 

 

委派过滤器代理 DelegatingFilterProxy 是一个特殊的 Servlet Filter,他的工作并不多,只是将工作委托给 javax.servlet.Filter 实现类

因此,我们只需要配置 DelegatingFilterProxy 即可实现借助一系列 Sever Filter 而实现的各种安全性功能

 

web.xml 配置

如果 Servlet 配置在 XML 中,那么可以为他添加 filter:

<filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class> org.springframework.web.filter.DelegatingFilterProxy </filter-class> </filter>

 

 

Java 配置

Spring 提供了 AbstractSecurityWebApplicationInitializer,他实现了 WebApplicationInitializer,因此 Spring 会自动发现他,他实现了在 web 容器中注册 DelegatingFilterProxy,并创建一个名为 springSecurityFilterChain 的 bean,我们无需进行任何额外配置,DelegatingFilterProxy 都会拦截发往应用的请求委托给这个 bean

package com.techlog.test.configuration; import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer; /** * Spring Security Servlet 配置 * Created by techlog on 2016/11/30. */ public class SpringSecurityInitializer extends AbstractSecurityWebApplicationInitializer { }

 

 

@EnableWebSecurity 是 Spring Security 最简单的启用方式,他必须配置在实现了 WebSecurityConfigurer 的 bean 上,最简单的方式是扩展 WebSecurityConfigurerAdapter 类:

package com.techlog.test.configuration; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; /** * SpringMVC Security 配置 * Created by techlog on 2016/11/29. */ @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { }

 

 

三个 configure 方法

通过复写 WebSecurityConfigurerAdapter 重载的三个 configure 方法,可以实现对各个请求不同的拦截规则:

WebSecurityConfigurerAdapter 提供的 configure 方法
方法描述
configure(WebSecurity)配置Spring Security的Filter链
configure(HttpSecurity)配置如何通过拦截器保护请求
configure(AuthenticationManagerBuilder)配置 user-detail 服务

 

默认配置会拦截所有请求,相当于:

@Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests().anyRequest().authenticated() .and().formLogin().and().httpBasic(); }

 

 

但是默认的配置下,所有请求都会被认证,但我们没有用户信息用来认证请求,所以所有的请求都会登录失败

 

配置过程

为了让 Spring Security 满足我们应用的需求,我们需要进行如下配置:

  1. 配置用户存储
  2. 指定哪些请求需要认证,以及所需要的权限
  3. 提供一个自定义的登录页面

 






技术帖      mvc      龙潭书斋      java      framework      spring      springmvc      security      user      agent     


京ICP备15018585号