SpringBoot3整合SpringSecurity6(五)自定义登陆页面
大家好,我是晓凡
写在前面
在前面的文章中,我们学习了SpringSecurity 登录认证流程,对其应该有个大概印象了。
忘记的小伙伴点击下面自己复习去~
在前面的学习中,我们使用的都是SpringSecurity 框架提供的登录页面,而实际开发中,我们往往都需要自定义登录页面。
一、准备登录页面
这里呢,我们先采取
Themleaf模板引擎来开发登录页面。后续会说到前后端分离的场景,小伙伴们不要着急,慢慢来
在resources/templates下创建mylogin.html登录页面,代码如下
<!DOCTYPE html>
<html xmlns:th="https://www.thymeleaf.org">
<head>
<title>晓凡登录页面</title>
</head>
<body>
<h1>登录</h1>
<div th:if="${param.error}">
用户名或者密码错误
</div>
<!--method必须为"post"-->
<!--mylogin: 和登录页面保持一致即可,SpringSecurity自动进行登录认证-->
<form th:action="@{/mylogin}" method="post">
<div>
<!--name必须为"username"-->
<input type="text" name="username" placeholder="用户名"/>
</div>
<div>
<!--name必须为"password"-->
<input type="password" name="password" placeholder="密码"/>
</div>
<input type="submit" value="登录" />
</form>
</body>
</html>

注:
需要采用post方式提交表单
用户名输入框的name属性必须是
username,SpringSecurity框架默认接收name="username"参数密码输入框的name属性必须是
password,SpringSecurity框架默认接收name="password"参数 。当然这里可以自定义,我们后面再细说。
二、编写登录接口
上面写的登录页面提交地址是
/login(th:action="@{/login}"),所以接下来我们来写一个登录接口,代码如下
@Controller
public class LoginController {
@GetMapping("/mylogin")
public String login() {
//跳转到mylogin试图解析器(上面自定义登录页面)
return "mylogin";
}
}
登录页面和登录接口都写好了,我们来试下是否能访问到我们自定义的登录页面。
浏览器地址栏输入:http://localhost:8080 回车后,我们发现还是系统的登录页面。结果如下

三、配置自定义登录页面
默认情况下,应用程序在走到我们写的LonginController之前,会经过一系列的过滤器。在过滤器中,其中配置的一个过滤器就是
http.formLogin(withDefaults());

这个过滤器默认会这样处理:如果应用程序没有进行授权的话,它会将浏览器跳转到/login 这个地址当中,如果/login这个地址作为请求发送到后端服务器。
SpringSecurity 就回去找默认的登录页面。
所以,我们要做的就是修改这个默认配置
// 自定义登录页面
http.formLogin(form->{
form.loginPage("/mylogin");
});
这时候我们,再重启服务,看看有没有达到我们的预期,结果如下

这是为什么呢?因为下面的配置会对所有请求进行授权保护
http.authorizeHttpRequests(
authorize->authorize
//对所有请求开启授权保护
.anyRequest()
//已认证的请求会被自动授权
.authenticated()
);
我们只需要对mylogin页面进行放行即可,修改后如下
// 自定义登录页面
http.formLogin(form->{
form.loginPage("/mylogin").permitAll();
});
经过修改之后,我们再来验证一下,浏览器地址栏输入:http://localhost:8080 后

成功跳转到我们自定义的登录页面了,登录界面虽然丑了一点,但功能是实现了~
四、csrf攻击
细心的小伙伴可能发现了,我们在编写登录页面的时候,form表单使用的是动态参数,具体如下
<form th:action="@{/mylogin}" method="post">
动态参数th:action="@{/login}" 这种写法可以防止csrf 攻击,我们来看下我们的登陆页面源码。
当然了,我们需要把csrf打开,csrf攻击只存在单体应用中。后面要学的前后端分离是不存在的,我们可以把csrf关闭

五、小结
本篇文章的核心知识点就是下面的自定义登录页面配置,理解了这儿就够了
// 自定义登录页面
http.formLogin(form->{
form.loginPage("/mylogin").permitAll();
});
我是晓凡,再小的帆也能远航~
希望本篇文章能帮助到您~
我们下期再见 ヾ(•ω•`)o (●'◡'●)
SpringBoot3整合SpringSecurity6(五)自定义登陆页面的更多相关文章
- JavaWeb-SpringSecurity自定义登陆页面
系列博文 项目已上传至guthub 传送门 JavaWeb-SpringSecurity初认识 传送门 JavaWeb-SpringSecurity在数据库中查询登陆用户 传送门 JavaWeb-Sp ...
- SpringSecurity自定义登陆页面和跳转页面
如果我们不用form-login说明登陆界面,springsecurity框架将自动为我们生成登陆界面 现在我们不想用自动生成的登陆界面了,而想使用自定义的漂亮的登陆界面 则需要使用<secur ...
- Wordpress在主题中自定义登陆页面并且禁用自带的登陆页面
在使用Wordpress制作主题之后,不想要他自带的登陆页面以及地址. 1.新建一个用户页面来接管与登陆相关的动作 //在主题根目录下新建page-login.php,通过action获取用户动作,然 ...
- SharePoint 2013混合模式登陆中 使用 自定义登陆页
接前一篇博客<SharePoint 2013自定义Providers在基于表单的身份验证(Forms-Based-Authentication)中的应用>,当实现混合模式登陆后,接着我们就 ...
- (二)spring Security 自定义登录页面与校验用户
文章目录 配置 security 配置下 MVC 自定义登录页面 自定义一个登陆成功欢迎页面 效果图 小结: 使用 Spring Boot 的快速创建项目功能,勾选上本篇博客需要的功能:web,sec ...
- JavaWeb-SpringSecurity自定义登陆配置
系列博文 项目已上传至guthub 传送门 JavaWeb-SpringSecurity初认识 传送门 JavaWeb-SpringSecurity在数据库中查询登陆用户 传送门 JavaWeb-Sp ...
- SpringBoot3.0 + SpringSecurity6.0+JWT
JWT_SpringSecurity SpringBoot3.0 + SpringSecurity6.0+JWT Spring Security 是 Spring 家族中的一个安全管理框架. 一般We ...
- Shiro 自定义登陆、授权、拦截器
Shiro 登陆.授权.拦截 按钮权限控制 一.目标 Maven+Spring+shiro 自定义登陆.授权 自定义拦截器 加载数据库资源构建拦截链 使用总结: 1.需要设计的数据库:用户.角色.权限 ...
- C#不用union,而是有更好的方式实现 .net自定义错误页面实现 .net自定义错误页面实现升级篇 .net捕捉全局未处理异常的3种方式 一款很不错的FLASH时种插件 关于c#中委托使用小结 WEB网站常见受攻击方式及解决办法 判断URL是否存在 提升高并发量服务器性能解决思路
C#不用union,而是有更好的方式实现 用过C/C++的人都知道有个union,特别好用,似乎char数组到short,int,float等的转换无所不能,也确实是能,并且用起来十分方便.那C# ...
- 【从零开始学BPM,Day5】报表配置及自定义功能页面开发
[课程主题] 主题:5天,一起从零开始学习BPM [课程形式] 1.为期5天的短任务学习 2.每天观看一个视频,视频学习时间自由安排. [第五天课程] 1.课程概要 Step 1 软件下载:H3 BP ...
随机推荐
- FastAPI极速入门:15分钟搭建你的首个智能API(附自动文档生成)🚀
title: FastAPI极速入门:15分钟搭建你的首个智能API(附自动文档生成) date: 2025/3/1 updated: 2025/3/1 author: cmdragon excerp ...
- 【Python】一键提取inp文件结构的脚本
inp=input("输入文件路径:") # print(type(inp)) ex_txt=inp+'-Struct.inp' inp=inp+'.inp' import re ...
- 探秘Transformer系列之(13)--- FFN
探秘Transformer系列之(13)--- FFN 目录 探秘Transformer系列之(13)--- FFN 0x00 概述 0x01 网络结构 1.1 数学表示 1.2 中间层比率 1.3 ...
- k8s:The connection to the server localhost:8080 was refused - did you specify the right host or port?
前言 k8s 集群 node节点报错:The connection to the server localhost:8080 was refused - did you specify the rig ...
- mysql [ERR] 1273 - Unknown collation: 'utf8mb4_0900_ai_ci'
这是因为当前数据库版本较高,需要更改一些参数 解决方法: 将sql文件中的 utf8mb4_0900_ai_ci替换为utf8_general_ci utf8mb4替换为utf8 再次运行SQL文件即 ...
- Django实战项目-学习任务系统-自定义URL拦截器
接着上期代码框架,6个主要功能基本实现,剩下的就是细节点的完善优化了. 首先增加URL拦截器,你不会希望没有登录用户就可以进入用户主页各种功能的,所以增加URL拦截器可以解决这个问题. Django框 ...
- HTTP/1.1、HTTP/2、HTTP/3
HTTP/1.1 相比 HTTP/1.0 性能上的改进: 使用长连接的方式改善了 HTTP/1.0 短连接造成的性能开销. 支持管道(pipeline)网络传输,只要第一个请求发出去了,不必等其回来, ...
- Win32控制台获取可执行程序的快捷方式的目标位置、起始位置、快捷键、备注等
Win32控制台获取可执行程序的快捷方式的目标位置.起始位置.快捷键.备注等,示例如下图: #include <iostream> #include <atlstr.h> #i ...
- bug|electron-vue 使用 electron-builder 打包,执行 yarn run build 报错原因
问题 & 解决 官方BUG:tasks 重复: yarn run build yarn run v1.22.22 $ node .electron-vue/build.js && ...
- 远程服务器画面GUI传输到本地显示
远程服务器画面GUI传输到本地显示 这篇文章主要介绍远程服务器(Ubuntu系统)的GUI画面传输到本地(本地Ubuntu或者Windows)显示的方法. 远程Ubuntu系统 --> 本地Wi ...