大家好,我是晓凡

写在前面

在前面的文章中,我们学习了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属性必须是usernameSpringSecurity 框架默认接收name="username"参数

  • 密码输入框的name属性必须是passwordSpringSecurity 框架默认接收name="password"参数 。当然这里可以自定义,我们后面再细说。

二、编写登录接口

上面写的登录页面提交地址是/loginth: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(五)自定义登陆页面的更多相关文章

  1. JavaWeb-SpringSecurity自定义登陆页面

    系列博文 项目已上传至guthub 传送门 JavaWeb-SpringSecurity初认识 传送门 JavaWeb-SpringSecurity在数据库中查询登陆用户 传送门 JavaWeb-Sp ...

  2. SpringSecurity自定义登陆页面和跳转页面

    如果我们不用form-login说明登陆界面,springsecurity框架将自动为我们生成登陆界面 现在我们不想用自动生成的登陆界面了,而想使用自定义的漂亮的登陆界面 则需要使用<secur ...

  3. Wordpress在主题中自定义登陆页面并且禁用自带的登陆页面

    在使用Wordpress制作主题之后,不想要他自带的登陆页面以及地址. 1.新建一个用户页面来接管与登陆相关的动作 //在主题根目录下新建page-login.php,通过action获取用户动作,然 ...

  4. SharePoint 2013混合模式登陆中 使用 自定义登陆页

    接前一篇博客<SharePoint 2013自定义Providers在基于表单的身份验证(Forms-Based-Authentication)中的应用>,当实现混合模式登陆后,接着我们就 ...

  5. (二)spring Security 自定义登录页面与校验用户

    文章目录 配置 security 配置下 MVC 自定义登录页面 自定义一个登陆成功欢迎页面 效果图 小结: 使用 Spring Boot 的快速创建项目功能,勾选上本篇博客需要的功能:web,sec ...

  6. JavaWeb-SpringSecurity自定义登陆配置

    系列博文 项目已上传至guthub 传送门 JavaWeb-SpringSecurity初认识 传送门 JavaWeb-SpringSecurity在数据库中查询登陆用户 传送门 JavaWeb-Sp ...

  7. SpringBoot3.0 + SpringSecurity6.0+JWT

    JWT_SpringSecurity SpringBoot3.0 + SpringSecurity6.0+JWT Spring Security 是 Spring 家族中的一个安全管理框架. 一般We ...

  8. Shiro 自定义登陆、授权、拦截器

    Shiro 登陆.授权.拦截 按钮权限控制 一.目标 Maven+Spring+shiro 自定义登陆.授权 自定义拦截器 加载数据库资源构建拦截链 使用总结: 1.需要设计的数据库:用户.角色.权限 ...

  9. C#不用union,而是有更好的方式实现 .net自定义错误页面实现 .net自定义错误页面实现升级篇 .net捕捉全局未处理异常的3种方式 一款很不错的FLASH时种插件 关于c#中委托使用小结 WEB网站常见受攻击方式及解决办法 判断URL是否存在 提升高并发量服务器性能解决思路

    C#不用union,而是有更好的方式实现   用过C/C++的人都知道有个union,特别好用,似乎char数组到short,int,float等的转换无所不能,也确实是能,并且用起来十分方便.那C# ...

  10. 【从零开始学BPM,Day5】报表配置及自定义功能页面开发

    [课程主题] 主题:5天,一起从零开始学习BPM [课程形式] 1.为期5天的短任务学习 2.每天观看一个视频,视频学习时间自由安排. [第五天课程] 1.课程概要 Step 1 软件下载:H3 BP ...

随机推荐

  1. . net core 项目创建和发布

    1.发布和部署到IIS https://www.cnblogs.com/loverwangshan/p/11284169.html https://www.cnblogs.com/wangjiegua ...

  2. 【基础知识】回头看Maven基础

    版本 日期 修订人 描述 V1.0 2025/3/7 nick huang 创建文档 背景 项目过程中,对于Maven的pom.xml文件,很多时候,我通过各种参考.仿写,最终做出想要的效果. 但实际 ...

  3. pandas 操作excel

    一 Series 什么是series 相当于表格中的行和列,不同的设置可以按行或列排序 2.series 创建 空的series import pandas as pd s2=pd.Series() ...

  4. 【小鼓捣】手搓Verilog-CPU测试全流程自动化

    自动化流程思路 1.C++/Python:生成大量包含指定指令的mips程序(A.asm) 2.命令行:导出该mips程序指令的机器码(A.txt) 3.魔改MARS:产生测试所需的IM.DM存入信息 ...

  5. 使用PySide6/PyQt6实现Python跨平台通用列表页面的基类设计

    我在随笔<使用PySide6/PyQt6实现Python跨平台GUI框架的开发>中介绍过PySide6/PyQt6 框架架构的整体设计,本篇随笔继续深入探讨框架的设计开发工作,主要针对通用 ...

  6. mac更新本地时间

    前言 选取苹果菜单 >"系统偏好设置",然后点按"日期与时间". 点按窗口角落处的锁形图标 ,然后输入您的管理员密码以解锁设置. 在"日期与时 ...

  7. git clone加速

    使用github的镜像网站进行访问,github.com.cnpmjs.org,我们将原本的网站中的github.com 进行替换.

  8. 使用Docker部署服务

    一.Docker概念 1.操作系统层面的虚拟化技术 2.隔离的进程独立于宿主和其它的隔离的进程 - 容器 3.GO语言开发 4.特点:高效的利用系统资源:快速的启动时间:一致的运行环境:持续交付和部署 ...

  9. 【docker】如何将服务器加入集群,成为子节点

    需求:将服务器加入集群,成为集群中的图一.png (18.95 KB, 下载次数: 0) 图一 图二.png (10.92 KB, 下载次数: 0) 图二 图三.png (26.71 KB, 下载次数 ...

  10. WIN2012域用户添加和批量添加工具

    WIN2012域用户添加和批量添加,不需要进行复杂的进电脑管理去添加 直接在软件上就可单个用户添加,可批量添加,并把指定的用户加入组 可以自定义组织单位,使用起来比较简单方便. 链接:https:// ...