跳至主要內容

Spring Security 入门案例

Jin大约 2 分钟

Spring Security 入门案例

1、创建工程

使用官方提供初始化 SpringBoot 项目在线工具 Spring Initializropen in new window ,配置参考:请点击此处超链接open in new window

1.1、坐标

implementation 'org.springframework.boot:spring-boot-starter-security:3.3.3'

![image-20240828170514716](images/03-Spring Security 入门案例/image-20240828170514716.png)

主要包含以下几个子模块:

  • spring-security-core: 核心包,包含核心认证和访问权限功能类和接口、远程支持和基本配置API
  • spring-security-webWEB框架集成包,包含过滤器和相关的web安全基础设施代码
  • spring-security-config:包含 security 命名空间解析代码和Java配置代码

2、代码

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

启动程序,UserDetailsServiceAutoConfiguration自动配置类,会生成一个默认随机登录密码(因为目前没有配置用户,配置后不会生成):

如下所示:

Using generated security password: 057ad09f-2e3c-4432-ac12-8926a79cc00f

密码是 User 类的构造函数来初始化 User 对象默认创建而来,源码路径:org.springframework.boot.autoconfigure.security.SecurityProperties.User

![image-20240828171155270](images/03-Spring Security 入门案例/image-20240828171155270.png)

前端

<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>

@{/logout}的作用

通过使用@{/logout}Thymeleaf 将自动处理生成正确的 URL,以适应当前的上下文路径。这样,无论应用程序部署在哪个上下文路径下,生成的URL都能正确地指向注销功能。

例如:如果我们在配置文件中添加如下内容

server.servlet.context-path=/demo

那么@{/logout}可以自动处理url为正确的相对路径

但是如果是普通的/logout,路径就会不正确

3、测试

@Controller
public class IndexController {

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

http 请求

GET http://localhost:8080

访问测试接口,此时被重定向到默认登录页面:

![image-20240828181607726](images/03-Spring Security 入门案例/image-20240828181607726.png)

用户名输入user,密码输入控制台生成的随机登录密码,登录成功后重定向到访问接口:

Hello Security!

也可以在yml中配置一个默认的登录用户及密码:

spring:
  security:
    user:
      name: jin
      password: jin

4、官方代码示例

GitHub

贡献者: Jin