前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >什么是Spring Security?具有哪些功能?

什么是Spring Security?具有哪些功能?

原创
作者头像
reload
发布2024-04-16 20:02:03
1991
发布2024-04-16 20:02:03
举报
文章被收录于专栏:Java后端Java后端

本篇将带你快速了解什么是Spring Security,通过入门案例以及相关原理和类的分析让你快速入门。

一、概述

官网:https://spring.io/projects/spring-security

Spring Security是一个Java框架,用于保护应用程序的安全性。它提供了一套全面的安全解决方案,包括身份验证授权防止攻击等功能。

1、身份认证是验证谁正在访问系统资源,判断用户是否为合法用户。认证用户的常见方式是要求用户输入用户名和密码。

2、授权是指用户进行身份认证后,系统会控制谁能访问哪些资源。用户无法访问没有权限的资源。

3、防御常见攻击:如CSRF、HTTP Headers、HTTP Requests

比如我们打开网页版京东进行登录,可以使用密码登录、短信登录、QQ登录、微信登录以及扫码登录几种方式。用户登录的过程其实就是一个身份认证的过程。

普通用户登录京东后,可以查看商品,加购物车,结算订单等,这些都是系统授予普通用户资源访问的权限。

二、入门案例

1、入门准备

这里我们参考官方文档来完成一个简单的Spring Security入门案例。

官方文档:https://springdoc.cn/spring-security/servlet/getting-started.html

点击示例库,进入如下目录

目录下对应的代码如下

1)Application启动类:HelloSecurityApplication.java

代码语言:java
复制
package example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class HelloSecurityApplication {

	public static void main(String[] args) {
		SpringApplication.run(HelloSecurityApplication.class, args);
	}

}

2)Controller控制类:IndexController.java。可以看到里面有一个index方法,返回了一个视图解析index

代码语言:java
复制
package example;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class IndexController {

	@GetMapping("/")
	public String index() {
		return "index";
	}
}

3)index.html,用到了thymeleaf模板语法

代码语言:html
复制
<html xmlns:th="https://www.thymeleaf.org">
<head>
    <title>Hello Security!</title>
</head>
<body>
    <h1>Hello Security</h1>
    <a th:href="@{/logout}">Log Out</a>
</body>
</html>

注:Thymeleaf是一个现代服务器端Java模板引擎,适用于Web和独立环境。

2、创建SpringBoot工程,编写代码

打开IDEA,创建SpringBoot工程,如下

添加对应依赖,完成后点击Finish等待联网创建

如果在创建工程时忘记添加,也可以自己手动在pom.xml文件中添加依赖

代码语言:xml
复制
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.thymeleaf.extras</groupId>
            <artifactId>thymeleaf-extras-springsecurity6</artifactId>
        </dependency>

创建controller包并在包下创建IndexController控制类,并在templates目录下创建一个index.html文件,代码可以参考上述官方文档模板里面的。

注:index.html里面使用动态链接的好处是:如果应用程序发布在了不同的目录下,thymeleaf的标签会做自动的相对路径的处理,而普通的a标签则不会。很好理解,动态的好处就是更加灵活方便。

3、启动运行,校验登录

启动项目,浏览器访问 http://localhost:8080/ ,用户名默认为user,密码为控制台输出的一串

访问后,会自动进入如下登录页进行身份认证

输入用户名和密码,登录进去后如下

点击Log Out后,提示如下

此时再次点击Log Out后,就会退回到刚开始的登录页。

4、案例总结

通过上述简单的入门案例,可以得出Spring Security要求对应用程序的任何交互进行身份验证。具体如下:

1)程序启动时生成一个默认用户“user”。

2)生成一个默认的随机密码,并将此密码记录在控制台上。

3)生成默认的登录表单和注销页面。

4)提供基于表单的登录(Sign in)和注销(Log Out)流程。

5)对于web请求,重定向到登录页面(http://localhost:8080/login);

三、底层相关原理

几个关键核心的部分如下:

1)DelegatingFilterProxy:作为过滤器的代理,能够帮助我们调用Spring容器中所有注册的过滤器。

2)FilterChainProxy:能够帮助我们管理多个不同的过滤器链。

3)SecurityFilterChain(0)~SecurityFilterChain(n):能够帮助我们处理复杂的业务逻辑。

当不同的客户端请求发送到服务端时,通过匹配不同的URL,由不同的过滤器组合来接收,从而实现由不同的过滤器来完成不同的业务功能。

四、程序启动运行相关的类

1、DefaultSecurityFilterChain

是SecurityFilterChain接口的实现,加载了默认的16个Filter。

可通过添加断点的方式进行追踪:在IDEA中 Ctrl + N,输入DefaultSecurityFilterChain进行检索,点击即可进入查看源码。在35行处添加断点,重新启动调试项目。

注:使用快捷键 Ctrl + N可以快速检索类/文件。

2、SecurityProperties

初始化配置,配置了默认的用户名(user)和密码(uuid)

同理,在IDEA中 Ctrl + N,输入SecurityProperties进行检索,点击即可进入查看源码。

在application.properties中配置自定义用户名和密码

代码语言:yml
复制
# 配置用户名和密码
spring.security.user.name=admin
spring.security.user.password=123456

配置完成后,重启项目,访问 http://localhost:8080/ ,就可以用自己配置好的用户名和密码登录了。

我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、概述
  • 二、入门案例
    • 1、入门准备
      • 2、创建SpringBoot工程,编写代码
        • 3、启动运行,校验登录
          • 4、案例总结
          • 三、底层相关原理
          • 四、程序启动运行相关的类
            • 1、DefaultSecurityFilterChain
              • 2、SecurityProperties
              相关产品与服务
              多因子身份认证
              多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档