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

news2025/1/12 22:56:42

注:此为笔者学习狂神说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连再起飞吧

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

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

相关文章

网络传输(TCP)

前言 我们tcpdump抓包时会看到除报文数据外,前面还有一段其他的数据,这段数据分为两部分,ip包头(一般20字节)和tcp包头(一般20字节),一般这两个头长度和为40,我们直接跳…

HarmonyOS 开发基础(九)forEach

HarmonyOS 开发基础(九)forEach 一、基础使用 Entry Component struct Index {// 创建一个变量,用来存储图片网络网址imageUrl: string https://gw.alicdn.com/imgextra/i2/2201227850912/O1CN01B7gVvP1Ibk6HMiDRz_!!2201227850912.jpg_Q75.…

父类,父类的分类、子类 同时重写方法,调用问题

做一个猜想,当父类、父类的分类、子类 都写了同一个方法,那么在调用的时候会优先调用哪个方法呢?我们可以先写一个简单的demo implementation Person (void)test {NSLog("%",self.class); }end然后是Person的分类 #import "…

git 使用 submodule 如何指定分支

写在前面, 作为一个前端我是不喜欢使用 submodule的, 我更喜欢 npm 包的管理方式。 首次添加子模块 git submodule add -b <branch> <remote> <path> 不指定分支就不传 -b <branch> <branch> 分支名<remote> 仓库地址<path> 子模块…

零样本学习研究方向sci四区期刊总结

APPLIED OPTICS sci 四区 非OA 出版商:OPTICA 期刊官方网站: http://www.opticsinfobase.org/ao/home.cfm 期刊投稿网址: http://www.opticsinfobase.org/ao/journal/ao/author.cfm#submit 虽然有zsl的名字但是这是全息图像专刊&#xff0c;跟我的方向应该不是太相关。 MO…

C# 微信小程序获取群id

前提 有个需求&#xff0c;需要限制小程序的抽奖只能在某个群内&#xff0c;需要知道谁在群里面&#xff0c;但是微信并没有提供谁在群里面的方法&#xff0c;不过提供了获取群id的方法&#xff0c;这样加上限制分享就能保证群里的参加&#xff0c;即时分享出去了&#xff0c;…

网络层详解

目录 前言 一、IP协议 1、IP协议报头 2、协议字段理解 &#xff08;1&#xff09;4位版本 &#xff08;2&#xff09;4位首部长度 &#xff08;3&#xff09;8位服务类型 &#xff08;4&#xff09;16位总长度 &#xff08;5&#xff09;标识、标志与片偏移 &#xf…

【自控实验】2. 采样控制系统特性

本科课程实验报告&#xff0c;有太多公式和图片了&#xff0c;干脆直接转成图片了 仅分享和记录&#xff0c;不保证全对 通过对二阶连续系统、二阶采样系统和具有保持器的二阶采样系统仿真实验&#xff0c;比较三种系统的特性&#xff0c;加深对采样控制系统的了解 使用matl…

阿里云OSS上传视频,可分片上传

uniappH5实现 阿里云OSS上传视频 示例图&#xff1a; 上传视频完整示例代码&#xff1a; 使用npm安装SDK开发包&#xff0c;安装命令为 npm install ali-oss --save accessKeyId 和 accessKeySecret 还有 bucket 替换成你的就行。 multipartUpload 的第一个入参是&#x…

leetcode 动态规划(最后一块石头的重量II、目标和、一和零)

1049.最后一块石头的重量II 力扣题目链接(opens new window) 题目难度&#xff1a;中等 有一堆石头&#xff0c;每块石头的重量都是正整数。 每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 y&#xff0c;且 x < …

Redis的设计、实现

数据结构和内部编码 type命令实际返回的就是当前键的数据结构类型,它们分别是:string(字符串)hash(哈希)、list(列表)、set(集合)、zset (有序集合),但这些只是Redis对外的数据结构。 实际上每种数据结构都有自己底层的内部编码实现,而且是多种实现,这样Redis会在合适的…

动手学深度学习-卷积神经网络

卷积神经网络 在前面的章节中&#xff0c;我们遇到过图像数据。这种数据的每个样本都由一个二维像素网格组成&#xff0c;每个像素可能是一个或者多个数值&#xff0c;取决于是黑白还是彩色图像。到目前为止&#xff0c;我们处理这类结构丰富的数据方式还不够有效。我们仅仅通…

[Kubernetes]7. K8s包管理工具Helm、使用Helm部署mongodb集群(主从数据库集群)

上一节讲解了[Kubernetes]6. k8s Pod配置管理ConfigMap & Secret以及传递环境变量的使用,k8s的命名空间以及使用kubens管理命名空间的使用,这里来介绍一下Helm的使用 一.Helm相关介绍 1.介绍 在 kubernetes 系统上部署容器化应用时需要事 先手动编写资源配置清单文件 以…

页面跳转后,默认选中tree节点并高亮显示

1.场景 操作步骤&#xff1a; 1.点击数据连接数&#xff0c;打开弹窗 2.点击连接状态跳转到数据连接模块 3.默认选中tree的数据源id节点 2.代码 参数解释&#xff1a; 3.实现逻辑 首先将id通过组件传参的方式传过去&#xff0c;数据连接接收后&#xff0c;在tree里设置…

Vue+element-china-area-data实现省市区三级联动

安装依赖 npm install element-china-area-data -S cnpm install element-china-area-data -S 引用 import { provinceAndCityData, regionData, provinceAndCityDataPlus, regionDataPlus, CodeToText, TextToCode } from element-china-area-data&#xff1b; provinceAnd…

【UE Niagara学习笔记】06 - 制作火焰喷射过程中飞舞的火星

在上一篇博客&#xff08;【UE Niagara学习笔记】05 - 喷射火焰顶部的蓝色火焰&#xff09;的基础上继续实现喷射火焰的火星的效果。 目录 效果 步骤 一、创建材质实例 二、添加新的发射器 2.1 设置粒子材质 2.2 设置发射器持续生成粒子 2.3 设置粒子生成数量 2.4 设…

Windows7共享文档—开启方法及用户权限设置

使用计算机的朋友&#xff0c;在工作中经常需要在局域网中将文件共享给其他用户&#xff0c;这样其他人可以方便的通过局域网查看&#xff0c;甚至修改这些共享文件。当然&#xff0c;根据文件的重要程度&#xff0c;使用等级不同&#xff0c;不同的用户会赋予不同的权限&#…

使用 schema 库,自定义较复杂的校验方法

目录 一、前置说明1、总体目录2、相关回顾3、本节目标 二、操作步骤1、项目目录2、依赖包安装及说明3、代码实现3、测试代码4、日志输出 三、后置说明1、要点小结2、下节准备 一、前置说明 1、总体目录 《 pyparamvalidate 参数校验器&#xff0c;从编码到发布全过程》 2、相…

记录浏览器莫名其妙部分网页无法访问的一个解决办法

问题描述&#xff1a; 不知道什么原因&#xff0c;浏览器无法访问CSDN了&#xff0c;访问其他网站都可以正常加载。 经电脑网络诊断检测&#xff0c;反馈内容大致为&#xff1a; 资源处于联机状态但未对连接尝试做出响应&#xff0c;远程计算机不接受端口443上的连接。 测试…

如何搭建开源知识库软件AFFiNE并实现公网环境远程协作【内网穿透】

目录 前言 1. 使用Docker安装AFFINE 2. 安装cpolar内网穿透工具 3. 配置AFFINE公网访问地址 4. 实现公网远程访问AFFINE 结语 作者简介&#xff1a; 懒大王敲代码&#xff0c;计算机专业应届生 今天给大家聊聊如何搭建开源知识库软件AFFiNE并实现公网环境远程协作【内网穿…