Spring Security专栏开始(初识 Spring Security)

555 阅读4分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

写在前面

感谢大家能点击这篇文章,相信你肯定知道Spring Security,并且想要系统的学习一下,那么你就来对了。本月并下月我会针对Spring Security 跟大家一起系统的学习下。

我以前写过一套设计模式专栏(已完结),现在正在进行的是并发队列专题,感兴趣的伙伴可以点击我的头像关注专栏 我们共同学习。现在想要Spring Security和并发队列专题起齐头并进(当然时间允许的话)

话不多话,进入今天的正题

初识 Spring Security

大多数同学可能接触的是SpringBoot和Security的结合, 其实在 Spring Boot 出现之前,Spring Security 就已经诞生多年了。Security汉语意思为安全。是的 是一套安全框架,为接口和工程保驾护航。以前常说 ,你的接口不能裸奔啊。得有相应的校验之类的,当然,这只是属于其中一种。

随着 Spring Boot 的兴起,基于 Spring Boot 所提供的针对 Spring Security 的自动配置方案,开发人员可以零配置使用 Spring Security。如果想要在 Spring Boot 应用程序中使用 Spring Security,只需要在 Maven 工程的 pom 文件中添加如下依赖:

<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-security</artifactId>
</dependency>

接下来 我们写个简单的接口。

@RestController
public class DemoController {
 
    @GetMapping("/hello")
    public String hello() {
        return "Hello World!";
    }
}

启动这个 Spring Boot 应用程序,然后通过浏览器访问"localhost/hello"接口。你可能希望得到的是"Hello World!"这个返回结果,但事实上,浏览器会跳转到一个如下所示的登录界面:

image.png

原因就是 Spring Security 为应用程序自动嵌入了用户认证机制。这里面相当于一个令牌的机制,该用户没有令牌,则无权进入。那么这个用户名和密码在哪里呢,从哪里获取呢。不方,你可以在你idea控制台中看到这样一行启动日志

Using generated security password: 707234543-6234f-5h43-a443-43758732h4

这行日志就是 Spring Security 生成的一个密码,而用户名则是系统默认的“user”。通过输入正确的用户名和密码,浏览器就会输出"Hello World!"这个响应结果

上述过程演示的就是 Spring Security 提供的认证功能,也是 Spring Security 众多功能中的一项基础功能。接下来,就让我们一同挖掘 Spring Security 中的完整功能体系。

Spring Security 功能

Spring Security 提供的是一整套完整的安全性解决方案。面向不同的业务需求和应用场景,Spring Security 分别提供了对应的安全性功能

我们可以把需要访问的内容定义为是一种资源(Resource),例如,在一个 Web 应用程序中,对外暴露的 HTTP 端点就可以被理解为是资源,我们先来理解在安全领域中非常常见但又容易混淆的两个概念,即认证(Authentication)和授权(Authorization)。

我们将认证和授权结合起来,就构成了对系统中的资源进行安全性管理的最常见解决方案,即先判断资源访问者的有效身份,再来确定其是否有对这个资源进行访问的合法权限,如下图所示:

image.png

这就相当于古人去觐见,敲门,看门的得看你是谁,能不能进,得去禀报看老爷让不让你进,所以是你是谁,你干什么,你有什么权限。

针对认证,这部分的需求相对比较明确。显然我们需要构建一套完整的存储体系来保存和维护用户信息,并且确保这些用户信息在处理请求的过程中能够得到合理的利用。

我们一般的做法是引入角色体系。我们对不同的用户设置不同等级的角色,角色等级不同对应的访问权限也不同。而每一个请求都可以绑定到某一个角色,也就具备了访问权限。

接下来,我们把认证和授权结合起来,梳理出 Web 应用程序访问场景下的安全性实现方案,如下图所示(下图来源于网络):

image.png

好了 今天只是简单讲一下,写的太多也没有用,下一章节 我们代码上见。

总结

Spring Security 是 Spring 家族中历史比较悠久的框架,具备完整而强大的功能体系。后面我们一起来学习。

弦外之音

感谢你的阅读,如果你感觉学到了东西,麻烦您点赞,关注。也欢迎有问题我们下面评论交流

加油! 我们下期再见!

给大家分享几个我前面写的几篇骚操作

聊聊不一样的策略模式(值得收藏)

copy对象,这个操作有点骚!