Spring Security 是Spring提供的安全框架。提供认证、授权和常见的攻击防护的功能。功能丰富和强大。
Spring Security is a powerful and highly customizable authentication and access-control framework. It is the de-facto standard for securing Spring-based applications.
1.2 OAuth2
OAuth(Open Authorization)开放授权是为用户资源的授权定义一个安全、开放的标准。而OAuth2是OAuth协议的第二个版本。OAuth常用于第三方应用授权登录。在第三方无需知道用户账号密码的情况下,获取用户的授权信息。常见的授权模式有:授权码模式、简化模式、密码模式和客户端模式。
1.3 JWT
JWT(json web token)是一个开放的标准,它可以在各方之间作为JSON对象安全地传输信息。可以通过数字签名进行验证和信任。JWT可以解决分布式系统登陆授权、单点登录跨域等问题。
JSON Web Token (JWT) is an open standard (RFC 7519) that defines a compact and self-contained way for securely transmitting information between parties as a JSON object.
2. SpringBoot 集成 SpringSecurity
SpringBoot 集成Spring Security 非常方便,也是简单的两个步骤:导包和配置
2.1 导入Spring Security 库
作为Spring的自家项目,只需要导入spring-boot-starter-security 即可
compile('org.springframework.boot:spring-boot-starter-security')
2.2 配置Spring Security
第一步:创建Spring Security Web的配置类,并继承web应用的安全适配器WebSecurityConfigurerAdapter。
第二步:重写configure方法,可以添加登录验证失败处理器、退出成功处理器、并按照ant风格开启拦截规则等相关配置。
第三步:配置默认或者自定义的密码加密逻辑、AuthenticationManager、各种过滤器等,比如JWT过滤器。
配置代码如下:
package com.itdragon.server.config
import com.itdragon.server.security.service.ITDragonJwtAuthenticationEntryPoint
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.http.HttpMethod
import org.springframework.security.config.annotation.web.builders.HttpSecurity
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder
import org.springframework.security.crypto.password.PasswordEncoder
@Configuration
@EnableWebSecurity
class ITDragonWebSecurityConfig: WebSecurityConfigurerAdapter() {
@Autowired
lateinit var authenticationEntryPoint: ITDragonJwtAuthenticationEntryPoint
/**
* 配置密码编码器
*/
@Bean
fun passwordEncoder(): PasswordEncoder{
return BCryptPasswordEncoder()
}
override fun configure(http: HttpSecurity) {
// 配置异常处理器
http.exceptionHandling().authenticationEntryPoint(authenticationEntryPoint)
// 配置登出逻辑
.and().logout()
.logoutSuccessHandler(logoutSuccessHandler)
// 开启权限拦截
.and().authorizeRequests()
// 开放不需要拦截的请求
.antMatchers(HttpMethod.POST, "/itdragon/api/v1/user").permitAll()
// 允许所有OPTIONS请求
.antMatchers(HttpMethod.OPTIONS, "/**").permitAll()
// 允许静态资源访问
.antMatchers(HttpMethod.GET,
"/",
"/*.html",
"/favicon.ico",
"/**/*.html",
"/**/*.css",
"/**/*.js"
).permitAll()
// 对除了以上路径的所有请求进行权限拦截
.antMatchers("/itdragon/api/v1/**").authenticated()
// 先暂时关闭跨站请求伪造,它限制除了get以外的大多