【Spring实战】13 Security+Thymeleaf自定义登录页面

文章目录

    • 1. 执行流程
    • 2. 为什么要自定义登录页面
    • 3. 创建登录页面
    • 4. 配置 Spring Security
    • 5. 创建请求 API
    • 6. 启动服务
    • 7. 验证
    • 8. 代码详细
    • 总结

Spring Security 是一个强大的身份验证和访问控制框架,而 Thymeleaf 是一个用于构建动态 Web 页面的强大模板引擎。结合它们,你可以轻松地创建一个具有自定义登录页面的安全Web应用程序。

关联文章

【Spring实战】10 Security 入门

【Spring实战】11 Security 常用配置

【Spring实战】12 Thymeleaf


本文着重介绍,在用户访问受保护的资源时,如果未经身份验证则跳转到使用 Thymeleaf 自定义的登录页面

1. 执行流程

本文接下来介绍的案例代码,大体执行流程:

在这里插入图片描述

2. 为什么要自定义登录页面

Spring Security 自带的登录页面,都是默认的一个画面风格(太丑)。如果我们想要自定义个一下画面样式或者文字就难以做到了,因此我们需要自定义一个属于我们自己的登录页面。

自带的长这样

在这里插入图片描述

3. 创建登录页面

我们先在 Spring 默认的资源文件夹(src/main/resources/templates)下创建一个 HTML 文件

login.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Koala Login Page</title><link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
</head>
<body class="bg-light">
<div class="container mt-5"><div class="row justify-content-center"><div class="col-md-6"><div class="card"><div class="card-header text-center"><h3>Koala System</h3></div><div class="card-body"><form th:action="@{/login}" method="post" class="text-center"><label for="username"></label><input type="text" class="form-control mb-2" id="username" name="username" th:value="${username}" placeholder="Username" required><label for="password"></label><input type="password" class="form-control mb-3" id="password" name="password" placeholder="Password" required><button type="submit" class="btn btn-primary btn-block">Login</button></form></div></div></div></div>
</div>
</body>
</html>

4. 配置 Spring Security

SecurityConfig.java

@Beanpublic SecurityFilterChain filterChain(HttpSecurity http) throws Exception {return http// 用户访问受保护的资源时,如果未经身份验证,系统将会重定向到 "/login" 页面。// 用户在登录成功后将会被重定向到 "/index" 页面。// 最后的 .permitAll() 确保未经身份验证的用户可以访问登录页面。.formLogin(customizer -> customizer.loginPage("/login").defaultSuccessUrl("/index", true).permitAll()).build();}

5. 创建请求 API

创建一个 接收 login 请求的 API

LoginController.java

@Controller
@RequestMapping("login")
public class LoginController {@GetMappingpublic String login() {return "login";}
}

分别再创建两个用于测试的请求 API

IndexController.java

@Controller
@RequestMapping("index")
public class IndexController {@GetMappingpublic String index(Model model) {model.addAttribute("msg", "Welcome to Koala System.");return "index";}
}

UserController.java

@Controller
@RequestMapping("user")
public class UserController {@GetMappingpublic String user() {return "Hello";}
}

6. 启动服务

在这里插入图片描述

7. 验证

首先,我们访问 user 的 URL

http://localhost:8080/user

在这里插入图片描述

我们发现,原本它会跳到一个默认的登录页面。此时它跳到了我们上面自定义的登录页面啦

然后输入用户名和密码,登录它

在这里插入图片描述

发现它居然跳到了 index 请求所对应的画面啦。因为我们加的这句代码 .defaultSuccessUrl("/index", true) 它表示登录成功后默认跳转到 index 。

在这里插入图片描述

8. 代码详细

https://github.com/cheney09/spring-practical-combat/tree/main/13/koala

在这里插入图片描述

总结

本文通过使用 Thymeleaf 自定义了一个 Spring Security 的登录画面,并且设定了一个登录成功的默认请求。这里只是一个简单的例子,在实际开发中还是需要根据具体需求来设定,都是大同小异,根据需求自由发挥即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/310010.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RIS 系列 See-Through-Text Grouping for Referring Image Segmentation 论文阅读笔记

RIS 系列 See-Through-Text Grouping for Referring Image Segmentation 论文阅读笔记 一、Abstract二、引言三、相关工作3.1 Semantic Segmentation and Embeddings3.2 Referring Expression Comprehension3.3 Referring Image Segmentation 四、方法4.1 视觉表示4.2 文本表示…

macos下转换.dmg文件为 .iso .cdr文件的简单方法

为了让镜像文件在mac 和windows平台通用, 所以需要将.dmg格式的镜像文件转换为.iso文件, 转换方法也非常简单, 一行命令即可 hdiutil convert /path/to/example.dmg -format UDTO -o /path/to/example.iso 转换完成后的文件名称默认是 example.iso.cdr 这里直接将.cdr后缀删…

进阶学习——Linux系统服务器硬件认识与RAID磁盘

目录 一、服务器知识补充 1.硬件 2.服务器常见故障 二、认识RAID 1.什么是RAID 2.RAID的优点 3.RAID的实现方式 三、RAID磁盘陈列 1.RAID 0 磁盘陈列介绍——RAID 0 2.RAID 1 磁盘陈列介绍——RAID 1 3.RAID 5 磁盘陈列介绍——RAID 5 4.RAID 6 磁盘陈列介绍——RA…

【Web】vulhub-httpd apache解析漏洞复现(1)

目录 ①CVE-2017-15715 ②apache_parsing_vulnerability ①CVE-2017-15715 贴出源码&#xff1a; <?php if(isset($_FILES[file])) {$name basename($_POST[name]);$ext pathinfo($name,PATHINFO_EXTENSION);if(in_array($ext, [php, php3, php4, php5, phtml, pht]))…

TOGAF架构开发方法

TOGAF针对架构开发方法定义了一系列阶段和步骤&#xff0c;这些阶段和步骤对架构的迭代过程进行了详细、标准的描述。 企业架构的项目过程 一、预备阶段&#xff08;Preliminary&#xff09; 1、目标 预备阶段的目标是&#xff1a; 对组织的背景和环境进行审查&#xff08;调…

简单vlan划分和dhcp中继(Cisco Packet Tracer模拟)

文章目录 1. 前言2. 功能实现2.1. dhcp服务器接入2.2. 学校web服务器2.3. 设置学校dns服务器2.4. 设置线路冗余2.5. 配置ac。 1. 前言 在这里我们的计网作业是使用思科的Cisco Packet Tracer进行对校园网的简单规划&#xff0c;这里我对校园网进行了简单的规划&#xff0c;功能…

优化算法3D可视化

编程实现优化算法&#xff0c;并3D可视化 1. 函数3D可视化 分别画出 和 的3D图 import numpy as np from matplotlib import pyplot as plt import torch# 画出x**2 class Op(object):def __init__(self):passdef __call__(self, inputs):return self.forward(inputs)def for…

python+django游戏分享论坛网站49c2c

本系统主要包括管理员和用户两个角色组成&#xff1b;主要包括首页、个人中心、用户管理、游戏类型管理、游戏文章管理、交流论坛、系统管理等功能的管理系统。 系统权限按管理员和用户两类涉及用户划分。 &#xff08;1&#xff09;管理员功能需求 管理员登陆后&#xff0c;主…

python+django高校教材共享管理系统PyCharm 项目

本中原工学院教材共享平台采用的数据库是mysql&#xff0c;使用nodejs技术开发。在设计过程中&#xff0c;充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。系统所要实现的功能分析&#xff0c;对于现在网络方便的管理&…

CSS 动态提示框

​​ <template> <div class"terminal-loader"><div class"terminal-header"><div class"terminal-title">提示框</div><div class"terminal-controls"><div class"control close"…

听GPT 讲Rust源代码--src/tools(36)

File: rust/src/tools/clippy/clippy_lints/src/loops/empty_loop.rs 在Rust源代码中&#xff0c;empty_loop.rs文件位于src/tools/clippy/clippy_lints/src/loops/目录下&#xff0c;它的作用是实现并提供一个名为EMPTY_LOOP的Lint规则。Clippy是一个Rust的静态分析工具&#…

gitlab 11.11.8的备份与恢复及500错误的修复

gitlab已经集成了非常方便的备份和恢复命令&#xff0c;只要我们执行这些命令就能完成gitlab的备份与恢复了。 我想gitlab备份与恢复的目的无非就是将已经运行了很久的旧的gitlab服务&#xff0c;迁移到新的服务器上。如果你旧的gitlab上项目很少&#xff0c;就需要考虑迁移服…