SpringSecurity6 | 自定义登录页面

SpringSecurity6 | 自定义登录页面

学习参考 :

1.前言

大家好,我是Leo哥🫣🫣🫣,接到上一节,我们学习通过SpringSecurity的一些自定义配置来完成我们自定义认证规则的一些需求。这篇文章我们主要来介绍一下如何自定义我的登录页面。好了,话不多说让我们开始吧😎😎😎。

2.环境配置

首先先说明一下我们的环境配置和技术要求,我们还是会创建一个新的SpringBoot工程,对其进行一些自定义配置。

因为我们要自定义我们的登录页面,所以我们这里会用到一种后端模版引擎-->Thyemleaf 。如果对Thyemleaf还不了解的同学,可以参考我这篇文章

3.自定义登录页面

3.1 导入依赖

在我们的pom.xml文件中导入ThymeLeaf依赖。

xml 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

3.2 创建login.html

并制定xml:th的映射,这里是为了可以在HTML中使用ThymeLeaf语法。

html 复制代码
<!DOCTYPE html>
<html lang="en" xml:th="http://www.thymeleaf.org">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Login Page</title>
  <style>
    body {
      font-family: Arial, sans-serif;
      background-color: #f4f4f4;
      margin: 0;
      padding: 0;
      display: flex;
      justify-content: center;
      align-items: center;
      height: 100vh;
    }
    .login-container {
      background-color: #fff;
      padding: 20px;
      border-radius: 5px;
      box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
    }
    .form-group {
      margin-bottom: 15px;
    }
    .form-group label {
      display: block;
      margin-bottom: 5px;
    }
    .form-group input {
      width: 100%;
      padding: 10px;
      border: 1px solid #ddd;
      border-radius: 5px;
      box-sizing: border-box; /* ensures padding doesn't affect width */
    }
    .form-group input[type="submit"] {
      background-color: #5c79b8;
      color: white;
      cursor: pointer;
    }
    .form-group input[type="submit"]:hover {
      background-color: #4cae97;
    }
  </style>
</head>
<body>
<div class="login-container">
  <h2>登录页面</h2>
  <form>
    <div class="form-group">
      <label for="username">用户名:</label>
      <input type="text" id="username" name="name" required>
    </div>

    <div class="form-group">
      <label for="password">密码:</label>
      <input type="password" id="password" name="passwd" required>
    </div>

    <div class="form-group">
      <input type="submit" value="Log In">
    </div>
  </form>
</div>
</body>
</html>

简单在浏览器,看看我们简易的登录界面吧。

3.3 配置

那我们如何将他配置为我们SpringSecurity的登录页面呢,通过以下配置。

首先我们在后端编写一个controller请求,也就是返回我们自定义的登录页面。

注意:这里一定不要写成@RestController了,因为我们不需要向前端返回JSON数据哈。

然后我们在SpringSecurity的配置类进行配置我们的自定义登录页面。

然后启动项目,访问hello接口。

但是我们发现一个问题,此时我们输入我们的用户名和密码却不能登录,而是会在浏览器进行刷新,我们接着往下看。

那么是怎么回事呢,此时我们需要回顾一下我们之前学习的知识,也就是我能当时查看表单登录的整合流程。

他会调用 HttpSecurity 类的 formLogin() 方法,在该方法中创建 FormLoginConfigurer 类的实例,并指定处理认证的 Filter 进行认证:

然后又去new了一个FormLoginConfigurer(),然后去调用父类的构造方法区new这个类

我们在UsernamePasswordAuthenticationFilter类中中的**attemptAuthentication()**方法中可以看到他的一些要求。

首先必须是POST请求,然后用户名的属性必须是username,密码的属性是password。

按照上面的解读,我们来按照规则改善一下我们的登录页面。

还需要对我们的配置类做一些改变,这里的登录的url要和我们前端请求的保持一致。

然后启动项目,再次访问。

当然还有另外一种方式实现是通过Java配置类的方式,而不是更改name属性值。我们这里简单介绍一下。

4.总结

本文由博客一文多发平台 OpenWrite 发布!

相关推荐
asdfg12589637 分钟前
一个例子理解Java中的函数式接口
java·函数式接口
toolsmith11 分钟前
一个商业软件的License校验,居然把验签的证书放在了License文件里
java
wuminyu14 分钟前
JDK21 FFM异步读取MSG_ZEROCOPY错误队列揭秘
java·linux·c语言·jvm·c++
存在morning20 分钟前
【PySpark 学习笔记 三】DataFrame API 入门
android·java·数据库
AC赳赳老秦22 分钟前
企业标签体系搭建:基于 OpenClaw 采集的多维度公开数据,构建企业画像标签库
java·运维·服务器·python·信息可视化·deepseek·openclaw
智嵌研习社25 分钟前
Ollama 本地大模型完全配置指南:Modelfile 参数与系统环境变量深度解析
java·开发语言
Crawl43 分钟前
5.登录与分页功能分析
java·后端
今天AI了吗1 小时前
AI Agent 在数据分析领域的落地判断:哪些场景真的需要 Agent
java·数据库·人工智能·python·sql·数据分析·copilot
SimonKing1 小时前
SwitchHosts V5大改版,我发现了这些惊喜和坑
java·后端·程序员
山甫aa2 小时前
日志技术 Logback + Slf4j —— 从零开始的 Web 后端学习
java·后端·学习·web·logback