当前位置: 首页 > news >正文

SpringBoot学习(五)-Spring Security配置与应用

注:此为笔者学习狂神说SpringBoot的笔记,其中包含个人的笔记和理解,仅做学习笔记之用,更多详细资讯请出门左拐B站:狂神说!!!

Spring Security

Spring Security是一个基于Java的开源框架,用于在Java应用程序提供身份验证和授权功能。它是Spring框架的一部分,可以与Spring应用程序集成为应用程序提供安全性

Spring Security提供了一套易于使用的API和配置选项,可以帮助开发人员轻松地实现身份验证和授权功能。它可以用于保护Web应用程序、REST API和方法级别的安全性

Spring Security的主要功能包括:

  1. 身份验证:Spring Security提供了多种身份验证方法,包括基于表单、基于HTTP基本认证、基于LDAP、基于CAS等。开发人员可以选择适合自己应用程序的身份验证方法来保护应用程序的安全性。

  2. 授权:Spring Security提供了灵活的权限控制机制,可以根据应用程序的需求定义细粒度的权限控制规则。开发人员可以使用注解、配置文件或数据库来定义权限规则,并根据用户角色或其他条件来限制用户的访问权限。

  3. 认证和授权支持:Spring Security可以与常见的认证和授权机制集成,包括LDAP、Active Directory、OAuth、OpenID Connect等,可以帮助开发人员轻松地实现与这些机制的集成。

  4. 安全性过滤器链:Spring Security使用过滤器链来处理请求,每个过滤器都可以执行不同的安全性操作。开发人员可以根据应用程序的需求配置不同的过滤器,并将它们链接在一起,以确保请求经过正确的安全检查。

  5. 安全性事件和监听器:Spring Security提供了一套事件和监听器机制,可以在用户认证和授权过程中触发不同的事件。开发人员可以注册自己的监听器,以便在特定事件发生时执行自定义的逻辑。

总结来说,Spring Security是一个功能强大且易于使用的安全框架,可以帮助开发人员轻松地实现身份验证和授权功能,并提供了许多灵活的配置选项和扩展点,以满足各种应用程序的安全需求。

1、准备工作

1)浏览官网

在这里插入图片描述

在这里插入图片描述

2)创建项目

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3)导入静态资源

在这里插入图片描述

在这里插入图片描述

4)关闭模板引擎

在这里插入图片描述

2、构造controller类

  • 实现链接访问静态资源与页面

在这里插入图片描述

3、用户认证和授权

在这里插入图片描述

  • 导入security依赖

在这里插入图片描述

  • 浏览官方文档

在这里插入图片描述

  • 自定义的操作:

在这里插入图片描述

1) 自定义SecurityConfig类

  • 用来自定义配置springsecurity

在这里插入图片描述

点进去看一下源码:

看一些重写的方法:

在这里插入图片描述

①重写configure(WebSecurity web)授权方法
protected void configure(HttpSecurity http) throws Exception

在这里插入图片描述

在这里插入图片描述

  • 没有权限,跳到登录页面

在这里插入图片描述

  • 点进去看一下formlogin的源码

在这里插入图片描述

在这里插入图片描述

默认会跳转回:/login首页,否则 /login?error

在这里插入图片描述

  • authorizeRequests(): 请求权限
  • antMatchers(“”;“”):增加地址
  • hasRole():指定访问用户
  • and():连接
  • formLogin:有权限就登陆,没权限就踢出去

默认是 name=username与name=password,不可以更改

②重写configure(AuthenticationManagerBuilder auth)方法:(用户认证

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

出现错误:

在这里插入图片描述

在这里插入图片描述

  • 看一下源码,然后添加加密方法
  • 在错误中,读源码,找到实现方法

在这里插入图片描述

在这里插入图片描述

4、注销及权限管理

1)在数据库中获得账号和密码

在这里插入图片描述

2)注销功能

在这里插入图片描述

logout():会默认跳到(“/login”)

在这里插入图片描述

  • logout后会调用许多方法,去删除一些配置:cookies、HttpSession

在这里插入图片描述

①注销的链接 “/logout”

在这里插入图片描述

②添加注销按钮(添加超链接)

在这里插入图片描述

在这里插入图片描述

问题:图标不对

③上网下载图标

Semantic UI 中文网→表单→图标→复制名字→粘贴修改对应的样式

在这里插入图片描述

  • 复制名字即可,后面的icon,不可以去掉

在这里插入图片描述

  • springboot自动提供logout页面功能

在这里插入图片描述

④注销功能跳到首页

在这里插入图片描述

在这里插入图片描述

直接调用后面的logoutSuccessUrl():成功登出,即可

在这里插入图片描述

  • 常规写法

在这里插入图片描述

无效的

  • 有效

在这里插入图片描述

注意

在这里插入图片描述

3)登录后用户只可以看到规定的内容

①先浏览maven仓库网页

在这里插入图片描述

②添加依赖

在这里插入图片描述

注:

在这里插入图片描述

③添加命名空间

在这里插入图片描述

注:

在这里插入图片描述

⑤修改首页的配置

在这里插入图片描述

引入 sec:

在这里插入图片描述

⑥遇到问题1:版本不支持

在这里插入图片描述

  • 改低版本(没做)

在这里插入图片描述

  • 原生的登录界面html

在这里插入图片描述

⑦遇到问题2:登录注销功能失败

在这里插入图片描述

  • index.html页面写错了,需要不断测试

    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • principal.getPassword()没解决

在这里插入图片描述

  • 结论:不能用principle方法,这个principle是一个令牌,设计CSRF防护功能
⑧关闭自动配置的CSRF防护功能
  • 用get请求会出现登录和注销错误的情况,这是因为引入了thymeleaf-security依赖后,springboot自动装配的,需要关掉,才能使用

在这里插入图片描述

如果有用到表单post,post提交修改数据的请求也不行,因为CSRF功能默认开启后,会拦截所有涉及数据修改方式的请求,需要配置携带CSRF Token令牌,才行

不同权限的用户,显示不同内容,实现动态菜单的效果
  • 导入thymeleaf-security依赖后,可以在前端做一些后端的操作

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 然后判断是否显示一些东西

5、记住我及首页定制

1)实现rememberMe

在这里插入图片描述

在这里插入图片描述

  • 关掉浏览器,看一下,能不能直接进去登录后的页面

在这里插入图片描述

①通过审查元素理解rememberMe

在这里插入图片描述

在这里插入图片描述

  • 开启一次浏览器代表一次会话,虽然清除了cookie,但是服务端还连接着,需要重启服务器后才可以看到,清除了cookie后的效果

在这里插入图片描述

②实现首页定制

在这里插入图片描述

成功和失败的login页面

在这里插入图片描述

在这里插入图片描述

③遇到问题1

在这里插入图片描述

尝试1:
  • 表单跳转的链接(“/toLogin”)和loginpage(“/toLogin”)一致,就可以啦?????为什么会跳转到index页面(已解决)

在这里插入图片描述

在这里插入图片描述

  • 表单:(“/toLogin”)method=“post”,会跳到这里来
  • 解决:

在这里插入图片描述

  • POST

在这里插入图片描述

在这里插入图片描述

尝试2:
  • 表单action改为: /login

在这里插入图片描述

  • 添加loginProcessingUrl(“/login”)

在这里插入图片描述

  • 表单的数据接收不到

在这里插入图片描述

  • login页面怎么接受密码的账号的

在这里插入图片描述

  • 点开源码看一下

在这里插入图片描述

  • 默认的参数,改了会接收不到,需要自定义

在这里插入图片描述

在这里插入图片描述

  • 自定义接收参数

在这里插入图片描述

2)在首页添加rememberMe功能

①添加rememberMe选框

在这里插入图片描述

②修改后端rememberMe

在这里插入图片描述

  • 看源码

在这里插入图片描述

rememberMeParameter:自定义接收前端的参数

在这里插入图片描述

  • 修改排版

在这里插入图片描述

注意:

在这里插入图片描述

总结:
主要:用户认证和授权、注销和权限管理、记住我和首页定制
​ 1.引入springsecurity框架后,这个比之前写拦截器等简便很多。
​ 2.Shiro面试会问,springsecurity默认会的
​ 3.未解决的问题:
​ ①表单跳转的链接(“/toLogin”)和loginpage(“/toLogin”) 一致,就可以啦?????为什么会跳转到index页面。
已解决:

在这里插入图片描述

在这里插入图片描述

  • 扩展:要使用表单提交的数据,需要表单申明 默认请求方式post(特殊请求,特殊接收),请求路径:“/login”, 当然,后台需要post来接收请求。

SpringBoot学习(五)-Spring Security配置与应用 开发的学习笔记到此完结,笔者归纳、创作不易,大佬们给个3连再起飞吧

相关文章:

SpringBoot学习(五)-Spring Security配置与应用

注:此为笔者学习狂神说SpringBoot的笔记,其中包含个人的笔记和理解,仅做学习笔记之用,更多详细资讯请出门左拐B站:狂神说!!! Spring Security Spring Security是一个基于Java的开源框架,用于在Java应用程…...

Java解决删除子串后的字符串最小长度

Java解决删除子串后的字符串最小长度 01 题目 给你一个仅由 大写 英文字符组成的字符串 s 。 你可以对此字符串执行一些操作,在每一步操作中,你可以从 s 中删除 任一个 "AB" 或 "CD" 子字符串。 通过执行操作,删除所…...

日志系统一(elasticsearch+filebeat+logstash+kibana)

目录 一、es集群部署 安装java环境 部署es集群 安装IK分词器插件 二、filebeat安装(docker方式) 三、logstash部署 四、kibana部署 背景:因业务需求需要将nginx、java、ingress日志进行收集。 架构:filebeatlogstasheskib…...

游戏版 ChatGPT,要用 AI 角色完善生成工具实现 NPC 自由

微软与 AI 初创公司 Inworld 合作,推出基于 AI 的角色引擎和 Copilot 助理,旨在提升游戏中 NPC 的交互力和生命力,提升游戏体验。Inworld 致力于打造拥有灵魂的 NPC,通过生成式 AI 驱动 NPC 行为,使其动态响应玩家操作…...

加工零件的题解

目录 原题描述: 题目描述 输入格式 输出格式 样例 #1 样例输入 #1 样例输出 #1 样例 #2 样例输入 #2 样例输出 #2 提示 题目大意: 主要思路: 但是我们怎么才能判断出x走到1时L是偶数还是奇数呢? 初始化:…...

走进shell

Linux系统启动时,会自动创建多个虚拟控制台。虚拟控制台是运行在Linux系统内存中的终端会话。 打开Linux控制台Terminal使用tty命令查看当前使用的虚拟控制台。 注:tty 表示电传打字机(teletypewriter) $ tty /dev/pts/0表示当前使用的是/dev/pts/0 虚拟…...

【Python】使用tkinter设计开发Windows桌面程序记事本(2)

上一篇:【Python】使用tkinter设计开发Windows桌面程序记事本(1)-CSDN博客 下一篇: 作者发炎 此代码模块是继承上一篇文章的代码模块的基础上开始设计开发的。 如果不知道怎么新建"记事本项目"文件夹,请参…...

Flutter DateTime 常用处理

今天介绍一下 DateTime 的一些常用功能,对其进行一个整理。 最近在开发过程中好多时候都会使用到时间方面的方法,心想还是统一处理一下,封装一个管理类,这个类可以满足我们开发过程中常用的时间方法。 今天正好整理了一下&#…...

【uniapp】APP打包上架应用商-注意事项

初雪云-uniapp启动图自定义生成(支持一键生成storyboard) HBuilderX需要的自定义storyboard文件格式为 " zip压缩包 " 一、“Android” — 设置targetSdkVersion 小米、OPPO、vivo、华为等主流应用商店,将于2023年12月采用 targetS…...

【算法题】43. 字符串相乘

题目 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。 注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。 示例 1: 输入: num1 "2", num2 "3…...

CH341 SPI方式烧录BK7231U

CH341是一个USB总线的转接芯片,通过USB总线提供异步串口、打印口、并口以及常用的2线和4线等同步串行接口。 BK7231U Wi-Fi SOC芯片,内嵌处理器。1. 符合802.11b/g/n 1x1协议 2. 17dBm 输出功率3. 支持20/40 MHz带宽和STBC 4. 支持Wi-Fi STA、AP、…...

sd-webui-EasyPhoto win 安装笔记

目录 安装教程: 插件介绍 ControlNet 1.1 Tile: launch.py问题 依赖库 webui安装问题...

gradient_checkpointing

点评:本质是减少内存消耗的一种方式,以时间或者计算换内存 gradient_checkpointing(梯度检查点)是一种用于减少深度学习模型中内存消耗的技术。在训练深度神经网络时,反向传播算法需要在前向传播和反向传播之间存储中间计算结果,以便计算梯度并更新模型参数。这些中间结…...

回溯算法part05 算法

回溯算法part05 算法 今日任务 491.递增子序列46.全排列47.全排列 II 1.LeetCode 491.递增子序列 https://leetcode.cn/problems/non-decreasing-subsequences/description/ class Solution {List<List<Integer>> resultnew ArrayList<>();List<Inte…...

阿里云系统盘测评ESSD、SSD和高效云盘IOPS、吞吐量性能参数表

阿里云服务器系统盘或数据盘支持多种云盘类型&#xff0c;如高效云盘、ESSD Entry云盘、SSD云盘、ESSD云盘、ESSD PL-X云盘及ESSD AutoPL云盘等&#xff0c;阿里云百科aliyunbaike.com详细介绍不同云盘说明及单盘容量、最大/最小IOPS、最大/最小吞吐量、单路随机写平均时延等性…...

RK3568平台开发系列讲解(Linux系统篇)Linux 内核打印

🚀返回总目录 文章目录 一、方法一:dmseg 命令二、方法二:查看 kmsg 文件三、方法三:调整内核打印等级一、方法一:dmseg 命令 在终端使用 dmseg 命令可以获取内核打印信息,该命令的具体使用方法如下所示: 首先在串口终端使用 “dmseg”命令,可以看见相应的内核打印信息…...

迁移学习的最新进展和挑战

随着深度学习和人工智能技术的飞速发展&#xff0c;迁移学习作为一种有效的机器学习方法&#xff0c;已经在各个领域取得了显著的成果。迁移学习是指将一个领域&#xff08;源领域&#xff09;的知识应用到另一个领域&#xff08;目标领域&#xff09;&#xff0c;以提高目标领…...

Python基础(二十二、自定义模块和包)

文章目录 一、自定义模块1.如何自定义模块并导入?2.__main__变量的功能3.注意事项 二、自定义包1.什么是Python的包?2.__init __.py文件的作用?3.__all__变量的作用?4.示例 三、自定义模块和自定义包的好处 一、自定义模块 1.如何自定义模块并导入? 在Python代码文件中正…...

C#-数组

数组 (array) 是一种包含若干变量的数据结构&#xff0c;这些变量都可以通过计算索引进行访问。数组中包含的变量&#xff08;又称数组的元素&#xff09;具有相同的类型&#xff0c;该类型称为数组的元素类型。 数组类型为引用类型&#xff0c;因此数组变量的声明只是为数组实…...

机器学习周刊第二期:300个机器学习应用案例集

大家好 前文&#xff1a;机器学习项目精选 第一期 继续分享我最近看过并觉得非常硬核的资源&#xff0c;包括Python、机器学习、深度学习、大模型等等。 1、Python编程挑战 地址&#xff1a;https://github.com/Asabeneh/30-Days-Of-Python 30天Python编程挑战是一个逐步学…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

云原生安全实战:API网关Kong的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关&#xff08;API Gateway&#xff09; API网关是微服务架构中的核心组件&#xff0c;负责统一管理所有API的流量入口。它像一座…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

R 语言科研绘图第 55 期 --- 网络图-聚类

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的&#xff1a;a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...