SpringSecurity入门

1、Spring Security简介

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

 

2、安全技术方案对比 

目前在整个Java开发的系统中,需要用于身份验证和访问控制框架的框架除了Spring Security, 还有一个就是Apache shiro框架.

2.1、Shiro

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

  • 易于理解的 Java Security API;
  • 简单的身份认证(登录),支持多种数据源(LDAP,JDBC,Kerberos,ActiveDirectory等);
  • 对角色的简单的鉴权(访问控制),支持细粒度的鉴权;
  • 支持一级缓存,以提升应用程序的性能;
  • 内置的基于 POJO 企业会话管理,适用于 Web 以及非 Web 的环境;
  • 异构客户端会话访问;
  • 非常简单的加密 API;
  • 不跟任何的框架或者容器捆绑,可以独立运行。

2.2、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框架功能简介

1. 认证: 用户登录, 解决的是"你是谁?"
2. 授权: 判断用户拥有什么权限,可以访问什么资源. 解决的是"你能干什么?"
3. 安全防护,防止跨站请求,session 攻击等

 

4、SpringSecurity应用场景 

1. 用户登录, 传统基于web开发的项目的登录功能.

2. 用户授权, 在系统中用户拥有哪些操作权限

3. 单一登录, 一个账号只能在同一时间只能在一个地方进行登录, 如果在其他地方进行第二次登录,则剔除之前登录操作 

4. 集成cas,做单点登录,即多个系统只需登录一次,无需重复登录

5. 集成oauth2 ,做登录授权, 可以用于app登录和第三方登录(QQ,微信等), 也可以实现cas的功能.

 

5、 SpringSecurity入门案例

快速体验SpringSecurity功能

5.1、创建Spring Boot 工程

使用Spring Initializr 快速过构建Spring Boot工程

Spring Boot版本选择2.3.5 , 并选中Spring Web 模块

5.2、编写Controller

package com.lagou.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* security入门案例
*/
@RestController
public class HelloSecurityController {
@RequestMapping("/hello")
    public String hello() {
        return "hello security";
    }
}

5.3、访问http://localhost:8080/hello 

5.4、添加SpringSecurity依赖

<!--添加Spring Security 依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

5.5、重启Spring Boot启动类,再次访问http://localhost:8080/hello

我们来观察下帮我们生成的表单页面 

咱们先看看这个页面源代码,这里有三点需要大家注意下:

  • 表单的提交方式和路径: post /login
  • input输入项的name值: username password
  • 隐藏域input的name: 值为: _csrf value值为d4329889-796a-447a-9d08-69e56bc7c296 

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

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

认证通过后可以继续访问处理器资源:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悠然予夏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值