SpringSecurity-2(认证和授权+SpringSecurity入门案例+自定义认证+数据库认证)

news2025/1/25 4:36:54

SpringSecurity使用自定义认证页面

    • 4 SpringSecurity使用自定义认证页面
        • 4.1 在SpringSecurity主配置文件中指定认证页面配置信息
          • 4.1.1 配置springSecurity.xml配置文件
          • 4.1.2 定义login.jsp
        • 4.2 SpringSecurity的csrf防护机制
          • 4.2.1 SpringSecurity中CsrfFilter过滤器说明
          • 4.2.2 禁用csrf防护机制
          • 4.2.3 在认证页面携带token请求
          • 4.2.4 退出认证
            • 4.2.4.1 禁用csrf过滤器
            • 4.2.4.2 没有禁用csrf过滤器

4 SpringSecurity使用自定义认证页面

4.1 在SpringSecurity主配置文件中指定认证页面配置信息
4.1.1 配置springSecurity.xml配置文件
<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:security="http://www.springframework.org/schema/security"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security.xsd">

<!--资源不过滤-->
<security:httpsecurity="none"pattern="/login.html"></security:http>
<security:httpsecurity="none"pattern="/failer.html"></security:http>
<!--
auto-config:true开启spring-security的自动配置
use-expressions="false"开启使用spring表达式的功能
-->
<security:httpauto-config="true"use-expressions="true">
<!--指定login.jsp页面可以被匿名访问-->
<security:intercept-urlpattern="/login.jsp"access="permitAll()"/>
<!--
intercept-url:拦截的请求资源/**所有的请求全部拦截
access:访问资源所需要的权限
-->
<security:intercept-urlpattern="/**"access="hasAnyRole('ROLE_USER','ROLE_ADMIN')"></security:intercept-url>
<!--
配置自定义表单
login-page:自定义的登录页面
login-processing-url:表单提交之后,交给那么action去处理springSecurity默认提供了一个叫/login的逻辑处理
username-parameter:值必须和登录表单里面的控件名称保持一致。
password-parameter值必须和登录表单里面的控件名称保持一致。
authentication-failure-forward-url:认证失败之后,需要跳转的页面
default-target-url:认证成功之后,需要跳转的页面
-->
<security:form-loginlogin-page="/login.jsp"login-processing-url="/login"
username-parameter="username"password-parameter="password"
authentication-failure-forward-url="/failer.html"
default-target-url="/index.jsp"
/>
<!--指定退出登录后跳转的页面-->
<security:logoutlogout-url="/logout"
logout-success-url="/login.jsp"/>
</security:http>
<!--配置认证管理器-->
<security:authentication-manager>
<!--配置认证提供者-->
<security:authentication-provider>
<!--配置认证服务-->
<security:user-service>
<!--
配置认证者
name用户名
password密码
authorities权限资源
-->
<security:username="user"password="{noop}user"authorities="ROLE_USER"></security:user>
<security:username="admin"password="{noop}admin"authorities="ROLE_ADMIN"></security:user>
</security:user-service>
</security:authentication-provider>
</security:authentication-manager>
</beans>
4.1.2 定义login.jsp
<%@pagecontentType="text/html;charset=UTF-8"language="java"%>
<html>

<head>
<title>Title</title>
</head>

<body>
<formaction="/login"method="post">
<security:csrfInput/>
<%--<security:csrfMetaTags/>--%><%--ajax提交用这个--%>
用户名:<inputtype="text"name="username"><br>
密码:<inputtype="password"name="password"><br>
<inputtype="submit"value="提交">
</form>
</body>
</html>

再次启动项目后就可以看到自定义的酷炫认证页面了:

在这里插入图片描述

然后你开开心心的输入了用户名user,密码user,就出现了如下的界面:

在这里插入图片描述

403什么异常?这是SpringSecurity中的权限不足!这个异常怎么来的?还记得上面SpringSecurity内置认证页面源码中的那个_csrf隐藏input吗?问题就在这了!
在这里插入图片描述

4.2 SpringSecurity的csrf防护机制

CSRF(Cross-siterequestforgery)跨站请求伪造,是一种难以防范的网络攻击方式。

在这里插入图片描述

4.2.1 SpringSecurity中CsrfFilter过滤器说明

打开CsrfFilter过滤器源码:

在这里插入图片描述

如何查看GET HEAD ERTRACE OPTIONS方法直接放行?点击if语句里面的matches方法。

在这里插入图片描述

查看其实现类DefaultRequiresCsrfMatcher

在这里插入图片描述

通过源码分析,我们明白了,自己的认证页面,请求方式为POST,但却没有携带token,所以才出现了403权限不足的异常。那么如何处理这个问题呢?
方式一:直接禁用csrf,不推荐。
方式二:在认证页面携带token请求。

4.2.2 禁用csrf防护机制

在SpringSecurity主配置文件中添加禁用crsf防护的配置。

在这里插入图片描述

但是这种方法一般不使用,禁用csrf过滤器,风险很大。

4.2.3 在认证页面携带token请求

先把禁用csrf过滤器的配置去掉。
在这里插入图片描述

再次请求,我们发现认证成功

4.2.4 退出认证

如何在主页上显示当前认证成功的用户呢?
在index.jsp页面上添加:
欢迎你,<security:authenticationproperty="principal.username"/>

4.2.4.1 禁用csrf过滤器
<!--关闭CSRF,默认是开启的允许我们使用自定义的表单-->
<security:csrfdisabled="true"/>
<ahref="${pageContext.request.contextPath}/logout">注销</a>

最后定义如下:

在这里插入图片描述

4.2.4.2 没有禁用csrf过滤器

如果没有禁用csrf过滤器,那么上面这种方法就不好使了。我们需要使用表单的post方法进行退出。

<formaction="${pageContext.request.contextPath}/logout"method="post">
<security:csrfInput/>
<inputtype="submit"value="注销">
</form>

最后定义如下:

在这里插入图片描述

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

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

相关文章

苹果iPhone 16 Pro系列有望支持Wi-Fi 7,再也不说苹果信号不好了

苹果公司始终以其创新技术引领智能手机市场的发展。 随着新一代iPhone 16系列的即将发布&#xff0c;特别是iPhone 16 Pro系列&#xff0c;预计将带来一系列令人瞩目的升级和新功能。 其中最引人注目的是Wi-Fi 7技术的应用&#xff0c;这将为用户带来前所未有的无线网络速度。…

计算机毕业设计选题推荐-校园服务系统-Java/Python项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

飞书API 2-7:如何将 MySQL 数据库的查询结果写入多维表(下)

一、引入 上一篇&#xff0c;解决了数据持续插入更新的问题。在一些场景下&#xff0c;如果数据量较大&#xff0c;需要跑多个任务调用接口插入&#xff0c;但是逐个跑任务又太久&#xff0c;又该怎么提高执行速度呢&#xff1f;没错&#xff01;就是多线程。 本文就来探讨下…

【Nuxt】服务端渲染 SSR

SSR 概述 服务器端渲染全称是&#xff1a;Server Side Render&#xff0c;在服务器端渲染页面&#xff0c;并将渲染好HTML返回给浏览器呈现。 SSR应用的页面是在服务端渲染的&#xff0c;用户每请求一个SSR页面都会先在服务端进行渲染&#xff0c;然后将渲染好的页面&#xf…

STM32 | ADC+RS485(第十天)

点击上方"蓝字"关注我们 01、ADC概述 ADC, Analog-to-Digital Converter的缩写,指模/数转换器或者模拟/数字转换器。是指将连续变量的模拟信号转换为离散的数字信号的器件。真实世界的模拟信号.例如温度、压力、声音或者图像等,需要转换成更容易储存、处理和发射的…

【公考新手教程】公考新手小白备考规划

公考 公考相关考试国考省考 行测常识判断言语理解与表达数量关系判断推理&#xff08;重中之重&#xff09;图推定义判断类比逻辑判断 资料分析&#xff08;重中之重&#xff09; 申论&#xff08;很重要&#xff0c;提升困难&#xff09;公基推荐考公软件粉笔华图在线bilibili…

零基础开始学习鸿蒙开发-文章推荐栏获取接口数据并展示

目录 1.新建文章列表布局页面&#xff0c;通过静态数据&#xff0c;编写好布局页面。 1.1 通过行ArticleCard布局构建单个文章展示的item项 1.2 使用了ObjectLink装饰器&#xff08;尽管这不是ArkUI标准API的一部分&#xff0c;特定框架或自定义的扩展&#xff09;&#xff0c…

在自定义数据集上训练现有的Detectron2模型

这段内容介绍了将使用一个气球分割数据集&#xff08;仅包含一个类别&#xff1a;气球&#xff09;来训练一个气球分割模型。训练过程将以一个预训练在COCO数据集上的模型为基础&#xff0c;这些模型可以在Detectron2的模型库中获取。需要注意的是&#xff0c;COCO数据集本身并…

神仙公司名单(苏州)

神仙公司&#xff08;苏州&#xff09; 前几天虽辟谣了 苏州佳能 N12/2N12 的裁员赔偿&#xff0c;但也同时指出了苏州是外企偏多&#xff0c;就业环境和生活节奏平衡的好城市。 但提到苏州公司&#xff0c;大家第一印象是微软、思科 和 Zoom 此类以 WLB 闻名的明星企业。 确实…

阿里「轨迹可控版Sora」,告别「抽卡」,让视频生成更符合物理规律

目前&#xff0c;扩散模型能够生成多样化且高质量的图像或视频。此前&#xff0c;视频扩散模型采用 U-Net 架构 &#xff0c;主要侧重于合成有限时长&#xff08;通常约为两秒&#xff09;的视频&#xff0c;并且分辨率和纵横比受到固定限制。 Sora 的出现打破了这一限制&#…

【教学类-73-01】20240804镂空瓶子01

背景需求&#xff1a; 瓶子里的春天呀&#xff01; - 小红书 (xiaohongshu.com)https://www.xiaohongshu.com/explore/63ef87f8000000000703acae?app_platformandroid&ignoreEngagetrue&app_version8.47.0&share_from_user_hiddentrue&xsec_sourceapp_share&…

谷粒商城实战笔记-vagrant避坑指南

文章目录 一&#xff0c;虚拟机磁盘空间不足问题原因解决方案 二&#xff0c;虚拟机导致C盘空间不足 一&#xff0c;虚拟机磁盘空间不足 使用vagrant管理虚拟机的过程中遇到了一个问题&#xff0c;虚拟机安装完成后&#xff0c;很快磁盘dev/sda1就满了&#xff0c;40G的空间&a…

链表篇: 04-寻找两个链表的第一个公共结点

解题思路&#xff1a; 方案一&#xff1a;长度统计法 从题目中可以看到&#xff0c;两个链表有长度差&#xff0c;这里可以先让长度比较长的链表先把长度差走完&#xff0c;这里假设为 pHead1, 先让 pHead1 把长度差走完&#xff0c;之后让两个链表同时往后进行遍历&#xff…

01:【stm32】软件安装及stm32的简要介绍

软件安装及stm32的简要介绍 1、软件安装1.1、安装Keil5 MDK软件1.2、安装DFP1.3、安装ARMCC编译器1.4、安装ST-Link驱动1.5、程序下载 2、stm32的介绍 1、软件安装 1.1、安装Keil5 MDK软件 ①先在D盘新建一个名为Keil5的文件夹。然后在Keil5文件夹里面新建2个文件夹&#xff0…

Vue从入门到精通全网最强保姆级教程

Vue是什么&#xff1f;为什么要学习他 Vue是什么&#xff1f; Vue是前端优秀框架&#xff0c; 是一套用于构建用户界面的渐进式框架 为什么要学习Vue 1 Vue是目前前端最火的框架之一 2 Vue是目前企业技术栈中要求的知识点 3 Vue可以提升开发体验 4 Vue学习难度较低 5 ..…

使用GCC编译Notepad++的插件

Notepad的本体1是支持使用MSVC和GCC编译的2&#xff0c;但是Notepad插件的官方文档3里却只给出了MSVC的编译指南4。 网上也没有找到相关的讨论&#xff0c;所以我尝试在 Windows 上使用 MinGW&#xff0c;基于 GCC-8.1.0 的 posix-sjlj 线程版本5&#xff0c;研究一下怎么编译…

【Kubernetes】Deployment 的创建和使用(实战)

Deployment 的创建和使用 创建 deployment-demo.yaml 文件&#xff0c;并在其中输入以下内容&#xff1a; apiVersion: apps/v1 kind: Deployment metadata:name: deployment-demolabels:app: nginx spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels…

Go语言加Vue3零基础入门全栈班15 gin+gorm+vue3用户管理系统实战录播课 2024年08月04日 课程笔记

预览 登录页面&#xff1a; 首页&#xff1a; 用户列表&#xff1a; 新增用户&#xff1a; 删除用户&#xff1a; 暗黑模式&#xff1a; 概述 如果您没有Golang的基础&#xff0c;应该学习如下前置课程。 01 Golang零基础入门课_20240726_149元02 Golang面向对象…

3.11.样式迁移

样式迁移 ​ 使用卷积神经网络&#xff0c;自动的将一个图像中的风格应用在另一图像之上&#xff0c;即样式迁移(style transfer) ​ 为了完成这一过程&#xff0c;我们需要两张输入图像&#xff1a;一张是内容图像&#xff0c;一张是风格图像&#xff0c;随后使用神经网络修…

【Nuxt】内置组件和全局样式使用

内置组件 Nuxt3框架也提供一些内置的组件&#xff0c;常用的如下&#xff1a; SEO组件&#xff1a;Html、Body、Head、Title、Meta、Style、Link、NoScript、BaseNuxtWelcome:欢迎页面组件&#xff0c;该组件是nuxt/ui的部分NuxtLayout:是Nuxt自带的页面布局组件NuxtPage:是N…