SpringSecurity6从入门到实战之自定义登录页面

SpringSecurity6从入门到实战之自定义登录页面

在使用SpringSecurity进行认证操作的时候,可以发现默认提供的登录页面比较简陋.那么我们能否对登录页面进行自定义配置呢?接下来开始讲解应该如何进行配置

自定义登录页面流程

引入模板依赖

由于自定义登录页面会使用到前端相关技术,这里需要引入thymeleaf依赖

<!--thymeleaf-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

在 templates 中定义登录界面

<!DOCTYPE html>
<html lang="en" xmlns:th="https://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>自定义登录页面</title>
</head>
<body>
<h1>用户登录</h1>
<form method="post" th:action="@{/doLogin}">用户名:<input name="uname" type="text"/><br>密码:<input name="upass" type="password"/><br><input type="submit" value="登录"/>
</form>
</body>
</html>

定义登录页面 controller

新建LoginController

@Controller
public class LoginController {@RequestMapping("/login.html")public String login() {return "login";}
}

这里直接访问localhost:8080/login.html会发现还是会需要进行认证操作,因为我们在自定义配置中还没有进行放行

定义 Spring Security 配置类

@Configuration
@EnableWebSecurity
public class MySecurityConfig {// 自定义表单认证@Beanpublic SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {http.authorizeHttpRequests().requestMatchers("/test").permitAll() // 放行该资源.requestMatchers("/login.html").permitAll() // 放行该资源.anyRequest().authenticated() // 其它请求 必须先认证通过后 才能访问.and().formLogin() // 开启表单认证.loginPage("/login.html")  // 默认登录页.loginProcessingUrl("/doLogin")  // 处理登录请求的url.usernameParameter("uname") // 用户名文件框的名称.passwordParameter("upass") // 密码框的名称.and().csrf().disable();  //关闭 CSRF;return http.build();}
}

可以发现这里的配置项都是跟login.html中的内容一一对应

测试

image.png

这里就可以发现访问需要认证的/hello会跳转到我们自定义的登录页面来了

输入账号密码进行认证

image.png
image.png

最终发现通过认证操作可以访问/hello接口了

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

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

相关文章

测试单选框

单选按钮&#xff1a;用于在一组互相排斥的选项中选择其中一项&#xff1b; 由一个圆圈和紧随其后的文本标题组成&#xff0c;当它被选中时&#xff0c;圆圈中就标上一个黑点。 通常将一组单选按钮放在一个组框控件中&#xff0c;在一组单选按钮中&#xff0c;第一个(Tab键顺序…

uniapp微信小程序局部刷新,无感刷新,修改哪条数据刷新哪条

uniapp做微信小程序时&#xff0c;一个商品列表滑到几百条数据时&#xff0c;点进去详情跳转去编辑信息上下架等&#xff0c;修改完成回来商品列表就到第一条数据了&#xff0c;这样页面效果体验感不是很好&#xff0c;是因为我们把数据接口放在onshow中了&#xff0c;每次回来…

SSH隧道(客户端的数据加密并通过 SSH 服务器转发到目标服务器)

SSH隧道简介 SSH 隧道&#xff08;SSH Tunneling&#xff09;是通过 SSH&#xff08;Secure Shell&#xff09;协议创建的安全通道&#xff0c;用于将流量从一个网络传输到另一个网络。 SSH 隧道可以用来保护网络数据的传输&#xff0c;通常用于穿越防火墙、隐藏流量、访问受…

【Linux】版本

文章目录 linux版本1、linxu技术版本&#xff08;内核版本&#xff09;2、linux商业化版本&#xff08;发行版本&#xff09; 区别 linux版本 1、linxu技术版本&#xff08;内核版本&#xff09; 内核&#xff1a;提供硬件抽象层、硬盘及文件系统控制及多任务功能的系统核心程…

PyTorch与TensorFlow模型互转指南

在深度学习的领域中&#xff0c;PyTorch和TensorFlow是两大广泛使用的框架。每个框架都有其独特的优势和特性&#xff0c;因此在不同的项目中选择使用哪一个框架可能会有所不同。然而&#xff0c;有时我们可能需要在这两个框架之间进行模型的转换&#xff0c;以便于在不同的环境…

高考志愿填报,理科生如何分析选专业?

理科生选择专业的范围更大一些&#xff0c;相比文科说理工科的院校也更多&#xff0c;如何选择适合自己的专业&#xff0c;这是一个比较重要的课题&#xff0c;毕竟大学专业直接关系到职业&#xff0c;是一辈子的大事。 那么理科究竟如何选择专业呢&#xff1f;需要从什么地方…

RPC框架知识学习

RPC框架介绍 RPC&#xff08;Remote Procedure Call&#xff0c;远程过程调用&#xff09;框架是一种允许程序调用位于另一台计算机上的程序的技术。这种调用看起来就像是调用本地程序一样&#xff0c;但实际上是通过网络进行的。RPC框架使得分布式系统的开发变得更加简单&…

MyBatis 自定义映射 ResultMap:一对多映射关系处理

在 MyBatis 中处理一对多&#xff08;或称为一对集合&#xff09;的映射关系时&#xff0c;我们通常会使用 collection 标签或分布查询来定义这种关系。这种关系常见于一个部门有多个员工这样的场景。下面我们将详细探讨如何使用 MyBatis 的 resultMap 来处理这种一对多的关系。…

Nginx反向代理Kingbase数据库

本文适用于开发人员学习运维领域知识&#xff0c;主要内容为在个人理解的基础上对企业级开发中所使用的Nginx和数据库kingbase相关使用&#xff0c;并附上Nginx反向代理kingbase数据库的相关配置的操作方式&#xff0c;感谢阅读 为什么是nginx代理kingbase数据库服务端 生产环…

JAVA学习笔记DAY6——SSM_Spring

文章目录 技术体系结构单体架构分布式架构 框架 FrameworkSpringIoc容器和核心概念组件Spring管理组件优点Spring Ioc 容器和容器实现普通容器复杂容器SpringIoc容器具体接口和实现类SpringIoc 容器管理配置方式 SpringIoc Ioc DI Spring Ioc 实践和应用Spring Ioc创建步骤配置…

【VUE3学习手札】

VUE3学习手札 vue3成长之路学习笔记 文章目录 VUE3学习手札前言一、markRaw1.1 代码示例1.2 应用场景1.3 拓展&#xff08;toRaw&#xff09;1.4 实际应用 二、ref 和 reactive 前言 主要用于自己的一个备忘&#xff0c;对知识点的查缺补漏 一、markRaw 将一个对象标记为不可被…

编程精粹—— Microsoft 编写优质无错 C 程序秘诀 02:设计并使用断言

这是一本老书&#xff0c;作者 Steve Maguire 在微软工作期间写了这本书&#xff0c;英文版于 1993 年发布。2013 年推出了 20 周年纪念第二版。我们看到的标题是中译版名字&#xff0c;英文版的名字是《Writing Clean Code ─── Microsoft’s Techniques for Developing》&a…

6spark期末复习

1)var a:Double5;var b:Int7;那么print(a*b) 2) var a:Int5; var bif(a>6) 7 println(b) 3)var a:Int16; var b:Int13; var cif(a>b) 5 else 7; println(c) 4. object TestDemo { print("B") def main(args: Array[String]): Unit { } } 5 def mai…

JeecgFlow排他网关演示

排他网关概念理解 排他网关&#xff0c;也称为异或(XOR)网关&#xff0c;用于流程中实现分支决策建模。排他网关需要搭配条件顺序流使用。 当流程流转到排他网关时&#xff0c;所有流程顺序流都是会顺序求解&#xff0c; 其中第一条条件为true的顺序流会被选中(当有多条顺序流都…

澳汰尔(Altair)3D 打印部件设计仿真——打造高效的增材制造设计

借助 Inspire Print3D&#xff0c;可加速创新、结构高效的 3D 打印部件的创建、优化和研究&#xff0c;提供快速准确的工具集&#xff0c;可用于实现选择性激光熔融 (SLM) 部件的设计和过程仿真。 工程师可以快速了解影响可制造性的工艺或设计变更&#xff0c;然后将部件和支撑…

JWT的优势

1、无状态&#xff1a; 2、有效避免了 CSRF 攻击&#xff1a;CSRF攻击&#xff0c;采用的是cookie进行攻击的&#xff1b;也避免XSS攻击&#xff0c;XSS采用的是js脚本进行攻击。 3、适合移动端应用&#xff1a;移动端没有cookie&#xff0c;jwt 4、单点登录友好&#xff1a…

SoC设计更重要的是IP管理

对于大多数片上系统&#xff08;SoC&#xff09;设计来说&#xff0c;最关键的任务不是RTL编码&#xff0c;甚至不是创建芯片架构。今天&#xff0c;SoC的设计主要使用来自多个供应商的各种IP块。这使得管理硅IP成为SoC设计过程中的主要任务。 一般来说&#xff0c;新编写的RTL…

Swift Combine — JUST Publisher

之前文章介绍的Publisher都是可以连续发送数据的&#xff0c;Subscriber也可以一直接收数据&#xff0c;除非收到了finished或者error而结束。而JUST Publisher则不同&#xff0c;它只向每个订阅者发送一次输出&#xff0c;然后结束。 一起来看一下下面的代码。 class JustVi…

从0到1:手动测试迈向自动化——手机web应用的自动化测试工具

引言&#xff1a; 在当今移动互联网时代&#xff0c;手机web应用已经成为人们生活中不可或缺的一部分。为了保证手机web应用的质量和稳定性&#xff0c;自动化测试工具变得十分重要。本文将介绍手机web应用自动化测试工具的选择和使用&#xff0c;提供一份超详细且规范的指南&a…

GPT3.5的PPO目标函数怎么来的:From PPO to PPO-ptx

给定当前优化的大模型 π \pi π&#xff0c;以及SFT模型 π S F T \pi_{SFT} πSFT​ 原始优化目标为: max ⁡ E ( s , a ) ∼ R L [ π ( s , a ) π S F T ( s , a ) A π S F T ( s , a ) ] \max E_{(s,a)\sim RL}[\frac{\pi(s,a)}{\pi_{SFT}(s,a)}A^{\pi_{SFT}}(s,a)] m…