Springboot +spring security,认证方式---Form表单认证的实现(一)

news2024/11/25 7:14:21

一.简介

这篇文章来学习下security的认证方式其中的Form表单认证

二.Spring Security的认证方式

2.1什么是认证

认证:
就是用来判断系统中是否存在某用户,并判断该用户的身份是否合法的过程,解决的其实是用户登录的问题。认证的存在,是为了保护系统中的隐私数据与资源,只有合法的用户才可以访问系统中的资源。

2.2认证的方式

在Spring Security中,常见的认证方式可以分为HTTP层面和表单层面,常见的认证方式如下:

  1. HTTP基本认证;
  2. Form表单认证
  3. HTTP摘要认证;

这篇文章先讲HTTP基本认证

三. Form表单认证

3.1Form表单认证简介

对于表单认证,其实在SpringBoot开发环境中,只要添加了Spring Security的依赖包,就会自动实现表单认证。先看下源码,在WebSecurityConfigurerAdapter类的config(HttpSecurity http)方法中,可以看到如下实现,截图如下:
在这里插入图片描述
所以在SpringBoot环境中,默认支持的就是表单认证方式。

3.2表单认证效果

我们在访问某个Web接口之前,都会重定向到一个Security自带的login登录页面上,这个登录页面,就是表单认证的效果。截图如下:
在这里插入图片描述

3.3表单认证中的预置url和页面

为什么表单认证会有以上效果?这是因为在默认的formLogin配置中,自动配置了一些url和页面:

  1. /login(get): get请求时会跳转到这个页面,只要我们访问任意一个需要认证的请求时,都会跳转到这个登录界面。
  2. /login(post): post请求时会触发这个接口,在登录页面点击登录时,默认的登录页面表单中的action就是关联这个login接口。
  3. /login?error: 当用户名或密码错误时,会跳转到该页面。
  4. /: 登录成功后,默认跳转到该页面,如果配置了index.html页面,则 ”/“ 会重定向到index.html页面,当然这个页面要由我们自己实现。
  5. /logout: 注销页面。
  6. /login?logout: 注销成功后跳转到的页面。

由此可见,SpringSecurity默认有两个login,即登录页面和登录接口的地址都是 /login:

  1. GET http://localhost:8080/login
  2. POST http://localhost:8080/login

如果是 GET 请求,表示你想访问登录页面;如果是 POST 请求,表示你想提交登录数据。

四. 创建SpringSecurity项目

参考之前的文章,这边不做叙述。

五.代码实现

5.1创建SecurityConfig配置类

创建SecurityConfig类,继承自WebSecurityConfigurerAdapter父类,该类的作用如下:

  1. 验证所有请求;
  2. 允许用户使用表达登录进行身份验证;
  3. 允许用户使用Http基本认证。

代码如下:

import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
 
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        //super.configure(http);
 
        //配置表单认证方式
        http.authorizeRequests()
                .anyRequest()
                .authenticated()
                .and()
                //开启表单认证
                .formLogin();
    }
}

我们在SecurityConfig类上添加@EnableWebSecurity注解后,会自动被Spring发现并注册。在configure()方法中,我执行了formLogin()方法,该方法的功能就是开启表单认证。

5.2创建web接口

HelloController类的代码如下:


import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
 
@RestController
public class HelloController {
 
    @GetMapping("/hello")
    public String hello() {
        return "德玛西亚";
    }
 
}

5.3yml配置文件

创建一个application.yml配置文件,配置如下:

spring:
  security:
    user:
      name: demaxiya
      password: 123

四.功能验证

4.1启动项目

接下来启动项目,访问我们定义的/hello接口时,首先会重定向到/login页面,截图如下:
在这里插入图片描述

我们只有输入自己配置的用户名和密码后,才可以正常访问/hello接口。

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

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

相关文章

数据挖掘实战(以kaggle为例)

第一课 主要分为以下内容进行讲述 机器学习工业应用领域 机器学习常用算法 机器学习常用工具 解决问题流程 数据的处理比模型更为重要 老师的博客,内容很详细 数据预处理 有时候可以一个feature一个feature去做 特征工程 模型选择 模型状态评估 模型融合 B…

消息通知配置-shorp

消息通知配置 注意事项: 消息均采用异步发送,请提前配置好队列,点这里配置队列配置完之后请别忘记在列表切换消息为启用状态 模板消息配置方式 (以订单发货通知为例) 准备工作 查看后台 消息通知 -》 消息配置 -》 订单发货通知编辑 微信公…

牛客网基础语法1~10题

牛客网基础语法1~10题 前言:今天是咱们第一期刷牛客网上的题目。 目标:掌握基础编程,打牢基础知识,有一定的编程思想 鸡汤:读不在三更五鼓,功只怕一曝十寒。先干为敬,大家随意。 第一题 #includ…

内网环境制作nacos镜像

1. 拉取用于构建的镜像 git clone https://github.com/nacos-group/nacos-docker.git 拉去下来是这样的 下载nacos压缩包 https://github.com/alibaba/nacos/tags 以2.2.2版本为例 将下载的压缩包,放到build文件夹 3. 修改Dockerfile文件 4.将build下的文件上…

复杂的网络

文章目录 1 查看windows的网络信息2 桥接模式和NAT模式3 连接开发板和虚拟机4. 网络分层、TCP、IO多路复用5. 家里的网络是怎么连接的 1 查看windows的网络信息 打开设置-网络查看 也可以直接cmd ipconfig 这次的网络连接(我连接的手机热点)是通过Inte…

由于找不到msvcr110.dll 无法继续执行怎么解决(最新解决方法分享)

MSVCR110.dll是Windows操作系统中的一个重要文件,一旦它出现丢失问题,会导致影响计算机整体的问题。这个跟MSVCP110.dll类似的误报,通常是由于安装编程工具或 部分无法正确安装所导致的问题。在这篇文章中,我们将一些解决此问题的…

Vulkan Tutorial 6 统一缓冲区

目录 20 layout and buffer 顶点着色器 描述符集布局 21 统一缓冲区 更新统一数据 22 Descriptor pool and sets 描述符池 描述符集 使用描述符集 对齐要求 20 layout and buffer 我们现在可以将任意属性传递给每个顶点的顶点着色器,模型-视图-投影矩阵将…

【干货分享】一篇文章帮你搞定前端高频面试题

前言 如今前端技术日新月异。对于前端开发人员来说,不仅需要掌握最新的前沿技术,还需要保持对基础知识的熟练掌握。而面试则是进入优秀企业的必经之路。在面试中,高频面试题的掌握是获得成功的关键。本文将为大家总结前端高频面试题及其答案&…

网络爬虫是什么

网络爬虫又称网络蜘蛛、网络机器人,它是一种按照一定的规则自动浏览、检索网页信息的程序或者脚本。网络爬虫能够自动请求网页,并将所需要的数据抓取下来。通过对抓取的数据进行处理,从而提取出有价值的信息。 认识爬虫 我们所熟悉的一系列…

23种设计模式之备忘录模式(Memento Pattern)

前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章将23种设计模式中的备忘录模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。 如果文章有什么需要改进的地方还请大佬…

高精度电压源如何设计出来的

高精度电压源是一种用于提供高精度电压的电子设备,通常用于测量和控制系统。高精度电压源的设计是一个复杂的过程,需要考虑多个因素,包括电路设计、元件选型、测量误差、稳定性等。下面将从电路设计和元件选型两个方面,详细介绍高…

如果通过Map转换成指定的class类

文章目录 前言如果通过Map转换成指定的class类1. 依赖2. 前期准备3. 测试 前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差,实在白嫖的话…

自然语言处理实战项目8- BERT模型的搭建,训练BERT实现实体抽取识别的任务

大家好,我是微学AI,今天给大家介绍一下自然语言处理实战项目8- BERT模型的搭建,训练BERT实现实体抽取识别的任务。BERT模型是一种用于自然语言处理的深度学习模型,它可以通过训练来理解单词之间的上下文关系,从而为下游…

spring boot--web响应

2. 响应 前面我们学习过HTTL协议的交互方式:请求响应模式(有请求就有响应) 那么Controller程序呢,除了接收请求外,还可以进行响应。 2.1 ResponseBody 在我们前面所编写的controller方法中,都已经设置了…

spring集成mybatis

目录 (1)新建javaEE web项目 ​(2)加入相关依赖的坐标 (3) 创建相应的包和类 (4) 配置spring和mybatis的配置文件 在resources中建mybatis-config.xml 在 resources中建spring.xml 在 resources中建db.xml 在 resources中建config.propertis 集成mybatis配置 ,导入myb…

MyBatis参数传递(提供ParamNameResolver类来进行参数封装)源码分析

MyBatis接口方法中可以接收各种各样的参数,MyBatis底层对于这些参数进行不同的封装处理方式。 单个参数:实体类、Map集合、Collection、List、Array以及其他类型。 多个参数:Param注解定义的名称要与sql语句中参数占位符中的名称相同。 这里…

RDD缓存有哪些特点?

RDD之间进行相互迭代计算(Transformation的转换),当执行开启后,新RDD的生成,代表老RDD的消失。RDD的数据是过程数据,只在处理的过程中存在,一旦处理完成,就不见了。这个特性可以最大化的利用资源&#xff0…

【CSAPP】Binarybomb 实验(phase_1-6+secret_phase)

Binarybomb 实验(phase_1-6secret_phase) 实验内容 一个“binary bombs”(二进制炸弹,下文将简称为炸弹)是一个Linux可执行C程序,包含了7个阶段(phase1~phase6和一个隐藏阶段)。炸…

【CANoe示例分析】0002_SOMEIPDemo

该工程由Vector官方提供,作为仿真SOME/IP节点的示例。Demo中介绍了两种仿真SOME/IP节点的方法,一种是基于arxml数据库的仿真,另一种是没有数据库(arxml、fibex)的仿真。 无论是哪种形式的仿真,如果想要通过CAPL程序接收或者发送SOME/IP信息,都需要添加交互 层的信息,这…

不懂就问:年薪百万的程序员是怎么做到的?

很多人对程序员的第一反应就是“工资高”。 从行业平均薪酬来看,“程序员”相关专业的收入确实更高一点。 但是,“程序员”内部薪资却存在着很大的差异,多数人月薪在1-2万,一线城市可以达到3-5万,而顶级程序员&#…