SpringSecurity总结

本文最后更新于:3 年前

冰山

Spring Security是一个功能强大且高度可定制的身份验证访问控制框架。它保护基于spring的应用程序的标准。

简介

Spring Security是一个功能强大且高度可定制的身份验证访问控制框架。它保护基于spring的应用程序的标准。

Spring Security的核心是用户认证(Authentication)用户授权(Authorization)

用户认证

用户认证指的是验证某个用户是否为系统中的合法主体,通俗点说就是系统认为用户是否能登录。用户认证一般要求用户提供用户名和密码。系统通过校验用户名和密码来完成认证过程。

在用户认证方面,SpringSecurity 框架支持主流的认证方式,包括 HTTP 基本认证、HTTP 表单验证、HTTP 摘要认证、OpenID
和 LDAP 等。

用户授权

用户授权指的是验证某个用户是否有权限执行某个操作,通俗点讲就是系统判断用户是否有权限去做某些事情。。在一个系统中,不同用户所具有的权限是不同的。比如对一个文件来说,有的用户只能进行读取,而有的用户可以进行修改。一般来说,系统会为不同的用户分配不同的角色,而每个角色则对应一系列的权限。

在用户授权方面,Spring Security 提供了基于角色的访问控制访问控制列表(Access Control List,ACL),可以对应用中的领域对象进行细粒度的控制。

与Shiro的对比

Spring Security 特点:

  • 与 Spring 无缝整合。
  • 全面的权限控制。
  • 专门为 Web 开发而设计。
    • 旧版本不能脱离 Web 环境使用。
    • 新版本对整个框架进行了分层抽取,分成了核心模块和 Web 模块。单独引入核心模块就可以脱离 Web 环境。
  • 重量级。

Shiro特点:

  • 轻量级。Shiro 主张的理念是把复杂的事情变简单。针对对性能有更高要求的互联网应用有更好表现。
  • 通用性。
    • 好处:不局限于 Web 环境,可以脱离 Web 环境使用。
    • 缺陷:在 Web 环境下一些特定的需求需要手动编写代码定制。

一般来说,常见的安全管理技术栈的组合是这样的:

  • SSM + Shiro
  • Spring Boot/Spring Cloud + Spring Security

权限管理中的相关概念

主体

英文单词:principal

使用系统的用户或设备或从其他系统远程登录的用户等等。简单说就是谁使用系统谁就是主体。

认证

英文单词:authentication

权限管理系统确认一个主体的身份,允许主体进入系统。简单说就是“主体”证明自己是谁。

笼统的认为就是以前所做的登录操作。

授权

英文单词:authorization

将操作系统的“权力”“授予”“主体”,这样主体就具备了操作系统中特定功能的能力。

所以简单来说,授权就是给用户分配权限。

SpringSecurity 基本原理

SpringSecurity 本质是一个过滤器链。

涉及的14条过滤器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter 
org.springframework.security.web.context.SecurityContextPersistenceFilter
org.springframework.security.web.header.HeaderWriterFilter
org.springframework.security.web.csrf.CsrfFilter
org.springframework.security.web.authentication.logout.LogoutFilter
org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter
org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter
org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter
org.springframework.security.web.savedrequest.RequestCacheAwareFilter
org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter
org.springframework.security.web.authentication.AnonymousAuthenticationFilter
org.springframework.security.web.session.SessionManagementFilter
org.springframework.security.web.access.ExceptionTranslationFilter
org.springframework.security.web.access.intercept.FilterSecurityInterceptor

重要的3条过滤器:

  • FilterSecurityInterceptor
  • ExceptionTranslationFilter
  • UsernamePasswordAuthenticationFilter

FilterSecurityInterceptor过滤器

方法级的权限过滤器, 基本位于过滤链的最底部

ExceptionTranslationFilter过滤器

异常过滤器,用来处理在认证授权过程中抛出的异常

UsernamePasswordAuthenticationFilter过滤器

对/login 的 POST 请求做拦截,校验表单中用户名,密码。

主要类

·WebSecurityConfigurerAdapter: 自定义Security策略

·AuthenticationManagerBuilder:自定义认证策略

·@EnableWebSecurity:开启WebSecurity模式

Spring Security的两个主要目标是 “认证” 和 “授权”(访问控制)。

“认证”(Authentication)

  • 身份验证是关于验证您的凭据,如用户名/用户ID和密码,以验证您的身份。
  • 身份验证通常通过用户名和密码完成,有时与身份验证因素结合使用。

“授权” (Authorization)

  • 授权发生在系统成功验证您的身份后,最终会授予您访问资源(如信息,文件,数据库,资金,位置,
    几乎任何内容)的完全权限。
  • 这个概念是通用的,而不是只在Spring Security 中存在。

学习和API文档

Spring Security官方文档

认证和授权

引入 Spring Security 模块

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!