# Spring Security 基础


<!--more-->


## 1.简介

Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架。它是用于保护基于Spring的应用程序的实际标准。Spring Security是一个框架，致力于为Java应用程序提供身份验证和授权。与所有Spring项目一样，Spring Security的真正强大之处在于可以轻松扩展以满足自定义要求

## 2.安全技术方案对比

- shiro

  Shiro是一个强大而灵活的开源安全框架，能够非常清晰的处理认证、授权、管理会话以及密码加密。如下是它所具有的特点

  易于理解的 Java Security API；

  - 简单的身份认证（登录），支持多种数据源（LDAP，JDBC，Kerberos，ActiveDirectory等）；

  - 对角色的简单的鉴权（访问控制），支持细粒度的鉴权；

  - 支持一级缓存，以提升应用程序的性能；

  - 内置的基于 POJO 企业会话管理，适用于 Web 以及非 Web 的环境；

  - 异构客户端会话访问；

  - 非常简单的加密 API；

  - 不跟任何的框架或者容器捆绑，可以独立运行

- Spring Security

  除了不能脱离Spring，shiro的功能它都有。而且Spring Security对Oauth、OpenID也有支持,Shiro则需要自己手动实现。Spring Security的权限细粒度更高

  > OAuth在"客户端"与"服务提供商"之间，设置了一个授权层（authorization layer）。"客户端"不能直接登录"服务提供商"，只能登录授权层，以此将用户与客户端区分开来。"客户端"登录授权层所用的令牌（token），与用户的密码不同。用户可以在登录的时候，指定授权层令牌的权限范围和有效期。
  >
  > "客户端"登录授权层以后，"服务提供商"根据令牌的权限范围和有效期，向"客户端"开放用户储存的资料。
  >
  > 
  >
  > OpenID 系统的第一部分是身份验证，即如何通过 URI 来认证用户身份。目前的网站都是依靠用户名和密码来登录认证，这就意味着大家在每个网站都需要注册用户名和密码，即便你使用的是同样的密码。如果使用 OpenID ，你的网站地址（URI）就是你的用户名，而你的密码安全的存储在一个 OpenID 服务网站上（你可以自己建立一个 OpenID 服务网站，也可以选择一个可信任的 OpenID 服务网站来完成注册）。
  >
  > 与OpenID同属性的身份识别服务商还有ⅥeID,ClaimID,CardSpace,Rapleaf,Trufina ID Card等，其中ⅥeID通用账户的应用最为广泛

## 3.Spring Security框架功能简介

- 谁证：用户登录，解决你是谁？
- 授权：判断用户拥有什么权限，可以访问什么资源，解决你干什么？
- 安全防护，防止跨站请求，session攻击等

## 4.应用场景

- 用户登录，传统基于web开发的项目的登录功能
- 用户授权，在系统中用户拥有哪些操作权限
- 单一登录，一个账号同一时间，只能在一个地方登录
- 集成cas，做单点登录，即多个系统只需登录一次，无需重复登录
- 集成oauth2,做登录授权，可以用于app登录和第三方登录

## 5.入门案例

![img](https://img.zhaojq.top/20260727091746018.png "img")

启动并调用测试接口如下图：

![img_1](https://img.zhaojq.top/20260727091746182.png "img_1")

查看看这个页面源代码，这里有三点需要注意下:

- 表单的提交方式和路径: post /login

- input输入项的name值: username password

- 隐藏域input的name: 值为: _csrf value值为d4329889-796a-447a-9d08-69e56bc7c296

SpringBoot已经为SpringSecurity提供了默认配置，默认所有资源都必须认证通过才能访问。那么问题来了！此刻并没有连接数据库，也并未在内存中指定认证用户，如何认证呢？

其实SpringBoot已经提供了默认用户名user，密码在项目启动时随机生成，如图：

![img_2](https://img.zhaojq.top/20260727091746351.png "img_2")
































































