大家好,我是晓凡

写在前面

在前面的文章中,我们学习了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. 补充:基于项目的协同过滤推荐算法(Item-Based Collaborative Filtering Recommendation Algorithms)

    前言 继续上篇博客,继续读论文. 想看上篇论文的同学可以点击这里 相关工作 In this section we briefly present some of the research litera ...

  2. redux vs redux-toolkit 及源码实现

    我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品.我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值. 本文作者:霜序 前言 为何讲这个内容?以为后续大家会使用 redux ...

  3. PHP中&&与and、||与or的区别

    https://blog.csdn.net/asty9000/article/details/80652064 在PHP中,&&与and都表示逻辑与,||与or都表示逻辑或,并且它们都 ...

  4. 权限获得第一步-NTLM暴力破解

    题目: 你猜这是什么东西,记得破解后把其中的密码给我.答案为非常规形式. Administrator:500:806EDC27AA52E314AAD3B435B51404EE:F4AD50F57683 ...

  5. oracle 数据库服务名怎么查

    WINDOWS上,直接看 服务里的 服务名就好:Oracle SID Service ,中间的SID就是数据库服务的名称.LINUX系统下,输入env |grep SID 可以查看到,一般没换都是这个 ...

  6. TaskPyro:一个轻量级的 Python 任务调度和爬虫管理平台

    前言 推荐一款本人在使用的Python爬虫管理平台,亲测不错!!! TaskPyro 是什么? TaskPyro 是一个轻量级的 Python 任务调度平台,专注于提供简单易用的任务管理和爬虫调度解决 ...

  7. Cursor 老改坏代码?六哥这几招超管用!

    大家好,我是六哥!最近不少小伙伴和我吐槽,在使用Cursor时,AI老是把代码改坏,让人头疼不已.我自己也用了大几十个小时Cursor,今天就来给大家分享一些实用小窍门,教大家如何巧妙规避这类问题. ...

  8. DFS 2025/1/15

    DFS & DFS 剪枝优化 Basic 01 先搜节点少的分支 如果搜进来一个大分支而答案不在此分支就会浪费大量时间 02 可行性剪枝 已经白扯了就 return 判断当前是否合法 03 最 ...

  9. MySQL 的 JSON 查询

    MySQL 的 JSON 路径格式 MySQL 使用特定的 JSON 路径表达式语法来导航和提取 JSON 文档中的数据 基本结构 MySQL 中的 JSON 路径遵循以下通用格式 $[路径组件] 路 ...

  10. SLAM导航全栈书的正确打开姿势

    SLAM导航全栈书的正确打开姿势 随着人工智能.机器人.无人驾驶等技术的蓬勃发展,作为底层技术基石的SLAM也逐渐被大家所熟知.人工智能技术如果仅仅停留在虚拟的网络和数据之中的话,那么它挖掘并利用知识 ...