1. 安全简介
在Web
开发中,安全一直是非常重要的一个方面。安全虽然属于应用的非功能性需求,但是应该在应用开发的初期就考虑进来。如果在应用开发的后期才考虑安全的问题,就可能陷入一个两难的境地:一方面,应用存在严重的安全漏洞,无法满足用户的要求,并可能造成用户的隐私数据被攻击者窃取;另一方面,应用的基本架构已经确定,要修复安全漏洞,可能需要对系统的架构做出比较重大的调整,因而需要更多的开发时间,影响应用的发布进程。因此,从应用开发的第一天就应该把安全相关的因素考虑进来,并在整个应用的开发过程中。
Spring Security
是一个功能强大且高度可定制的身份验证和访问控制框架。它是保护基于spring
的应用程序的实际标准。Spring Security
是一个框架,侧重于为Java
应用程序提供身份验证和授权。与所有Spring
项目一样,Spring
安全性的真正强大之处在于它很容易扩展以满足定制需求
spring security
的核心功能主要包括:
Authentication
用户认证 (你是谁)Authorization
用户授权 (你能干什么)- 防止攻击(防止伪造身份),如会话固定,点击劫持,跨站请求伪造等
Servlet API
的集成- 可选的与
Spring Web MVC
的集成
实际上,在 Spring Boot
出现之前,Spring Security
就已经发展了多年了,但是使用的并不多,安全管理这个领域,一直是 Shiro
的天下。
相对于 Shiro
,在 SSM/SSH
中整合 Spring Security
都是比较麻烦的操作,所以,Spring Security
虽然功能比 Shiro
强大,但是使用反而没有 Shiro
多(Shiro
虽然功能没有 Spring Security
多,但是对于大部分项目而言,Shiro
也够用了)。
自从有了 Spring Boot
之后,Spring Boot
对于 Spring Security
提供了 自动化配置方案,可以零配置使用 Spring Security
。
因此,一般来说,常见的安全管理技术栈的组合是这样的:
- SSM + Shiro
- Spring Boot/Spring Cloud + Spring Security
2. 认识SpringSecurity
Spring Security
是针对Spring
项目的安全框架,也是Spring Boot
底层安全模块默认的技术选型,他可以实现强大的Web
安全控制,对于安全控制,我们仅需要引入 spring-boot-starter-security
模块,进行少量的配置,即可实现强大的安全管理!
记住几个类:
- WebSecurityConfigurerAdapter:自定义
Security
策略 - AuthenticationManagerBuilder:自定义认证策略
- @EnableWebSecurity:开启
WebSecurity
模
“认证”(Authentication)
身份验证是关于验证您的凭据,如用户名/用户ID和密码,以验证您的身份。
身份验证通常通过用户名和密码完成,有时与身份验证因素结合使用。
“授权” (Authorization)
授权发生在系统成功验证您的身份后,最终会授予您访问资源(如信息,文件,数据库,资金,位置,几乎任何内容)的完全权限。