Spring Security 是 Spring 项目组中用来提供安全认证服务的框架。应该说,Spring Security是使用最多的安全框架。
Spring Security使用的目的: 验证,授权,攻击防护。
背景:
谈论优点的同时,不妨先考虑一下,没有Spring Security我们难道就无法实现认证和授权了吗?
肯定不是的,一般涉及到用户授权,我们都会分为用户表、角色表、用户角色表、菜单表、角色菜单表。有这五张表,就算没有Spring Security我们依旧可以完成用户菜单等控制。
那他究竟在项目中起到了什么作用呢?
和 Spring 无缝整合,在SpringBoot下更加简便。在SpringBoot的自动装配下,可能我们只需要写一行配置,就能实现一个功能。
对身份验证和授权的全面且可扩展的支持,到底有多全面?
(1)他提供了登录页和退出页,假如我们着急做项目不想做登录页,只需要引入个依赖添加少量配置就可以快捷的完成一个登录功能
(2)使用SpringSecurity可以轻松完成接口的权限管理,假如不用SpringSecurity,那我们想要指定某个接口只允许拥有某个角色才能访问,这时候我们可能还得用拦截器来做,而且相当麻烦。
(3)这么给你说吧,你做登录和授权,只要是你能想到的,不管是安全方面,还是控制方面,SpringSecurity都能实现,最主要的是通过一个简单配置就能实现。可以防止会话固定、点击劫持、跨站点请求伪造等攻击
注意:说的再简化一点,就是有了spring security,你再做登录,权限等方面就可以直接套用了,基本的你就直接写接口就可以了,应该是为了更加的简化。但是理解起来,还是比较复杂的,毕竟他的实现逻辑居然有大量的filter,常用的就有15个之多。
版本:
spring security 5 版本和spring security 4版本,是当前的主流版本。主要都是与spring boot的集成。
spring boot 1.x版本的时候,主要集成 spring security 4
spring boot 2.x版本的时候,主要集成 spring securiyt 5
功能:
Spring Security的主要功能
认证:验证用户名和密码是否合法(是否系统中用户)
授权:是系统用户不代表你能使用某些功能,因为你可能没有权限
防御会话固定,点击劫持,跨站点请求伪造等攻击
Servlet API集成
与Spring Web MVC的可选集成
Spring Security主要是从两个方面解决安全性问题:
web请求级别:使用Servlet规范中的过滤器(Filter)保护Web请求并限制URL级别的访问。
方法调用级别:使用Spring AOP保护方法调用,确保具有适当权限的用户才能访问安全保护的方法。
对比:
SpringSecurity 特点:
SpringSecurity是Spring 技术栈的组成部分,能和Spring 无缝整合。 全面的权限控制。 重量级。Shiro 特点:
Apache 旗下的轻量级权限控制框架。
Shiro 主张的理念是把复杂的事情变简单。针对对 性能 有更高要求的互联网应用有更好表现。在 SSM 中整合 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
以上只是一个推荐的组合而已,如果单纯从技术上来说,无论怎么组合,都是可以运行的。
模块: