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连再起飞吧

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

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

相关文章

【深度学习】cv领域中各种loss损失介绍

文章目录 前言一、均方误差二、交叉熵损失三、二元交叉熵损失四、Smooth L1 Loss五、IOU系列的loss 前言 损失函数是度量模型的预测输出与真实标签之间的差异或误差,在深度学习算法中起着重要作用。具体作用: 1、目标优化:损失函数是优化算法…

文件归类妙招:用关键字替换改扩展名方法,文件重命名技巧

在日常工作中,文件的数量会随着时间的推移不断增加。如果文件没有得到适当的归类和整理,就会导致很难找到所需的文件。所以文件归类是非常重要的任务。现在来看云炫文件管理器一些实用的文件归类妙招:用关键字替换修改文件扩展名的方法&#…

Kubernetes复习总结(二):Kubernetes容器网络

2、Kubernetes容器网络 1)、Docker网络原理 Docker默认使用的网络模型是bridge,这里只讲bridge网络模型 1)容器之间通信原理 当安装完docker之后,docker会在宿主机上创建一个名叫docker0的网桥,默认IP是172.17.0.1…

AI动作冒险电影《加勒比海盗:失落的宝藏》(下)

AI动作冒险电影《加勒比海盗:失落的宝藏》(下) 在宝藏岛屿的探险中,杰克船长不断遭遇铁钩胡克的追击,并陷入了一系列生死危机中。然而,当杰克终于找到宝藏所在的洞穴时,却发现了一个令人震惊的事…

HarmonyOS 开发基础(五)Button

HarmonyOS 开发基础(五)Button Entry Component struct Index {build() {Row() {Column() {// Button:ArkUI 的基础组件 按钮组件// label 参数:文字型按钮Button(我是按钮)// width:属性方法,设置组件的宽…

shell编程-分支语句和循环结构

流控制: •在一个shell脚本中的命令执行顺序称作脚本的流。大多数脚本会根据一个或多个条件来改变它们的流。 •流控制命令:能让脚本的流根据条件而改变的命令称为条件流控制命令 •exit语句:退出程序的执行,并返回一个返回码,返回码为0正常退出&#…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)在EventLoop中处理被激活的文件描述符的事件

文件描述符处理与回调函数 一、主要概念 反应堆模型:一种处理系统事件或网络事件的模型,当文件描述符被激活时,可以检测到文件描述符:在操作系统中,用于标识打开的文件、套接字等的一种数据类型 处理激活的文件描述符…

BUUCTF--pwnable_start1

查看保护: 32位程序保护全没开,黑盒测试下效果: 存在栈溢出,那么这题的想法就是直接ret2shellcode了。IDA中看看具体流程: 出奇的少,这题不能看反汇编的代码,直接去看汇编: 主要就2个…

【设计模式之美】面向对象分析方法论与实现(一):需求分析方法论

文章目录 一. 需求举例二. 对案例进行需求分析1. 第一轮基础分析2. 第二轮分析优化3. 第三轮分析优化4. 第四轮分析优化5. 最终确定需求 三. 小结 本文主要描述: 面向对象的需求分析方法论 一. 需求举例 假设,你正在参与开发一个微服务。微服务通过 HTT…

msvcr120.dll丢失怎样修复,三种修复msvcr120.dll丢失的方法

"msvcr120.dll"是一个重要的库文件,用于支持Microsoft Visual C 2013 Redistributable软件包中的应用程序。在本文中,我们将介绍"msvcr120.dll"文件的重要性和作用,并探讨当msvcr120.dll丢失怎样修复的办法。以及msvcr12…

Python基础教程——90行Python代码让微信地球转起来!!(完整版,附源码)

今天我们来一个好玩儿的东西,使用90行Python代码就可以让【微信第地球】转起来,太有意思啦! 1.微信地球 手机重启后打开微信的一瞬间,会看到一幅有名的图片,上面站着一个张小龙。 你可曾想过这样一个问题&#xff0c…

走向云原生 破局数字化

近年来,随着云计算概念和技术的普及,云原生一词也越来越热门,云原生成为云计算领域的新变量。行业内,华为、阿里巴巴、字节跳动等各个大厂都在“抢滩”云原生市场。行业外,云原生也逐渐出圈,出现在大众视野…

GUI设计基础

层次结构 要学GUI,大概先知道它的层次结构,如下图所示,我们要设计的就是下面这个几个东西。 菜单uimenu 建立一级菜单项的函数调用格式: hmuimenu(h_parent,PropertyNamel,valuel,propertyName2,value2,...); hm 是…

修改mariadb的默认存储路径

首先mariadb服务正常启动 安装mariadb: https://blog.csdn.net/qq_50247813/article/details/135402502?spm1001.2014.3001.5502 停止mariadb服务 systemctl stop mariadb创建新的数据存放目录 mkdir /data将mariadb的数据拷贝到/data目录下 mv /var/lib/mysq…

设计模式学习2

代理模式:Proxy 动机 “增加一层间接层”是软件系统中对许多复杂问题的一种常见解决方案。在面向对象系统中,直接食用某些对象会带来很多问题,作为间接层的proxy对象便是解决这一问题的常见手段。 2.伪代码: class ISubject{ pu…

AIGC学习笔记(1)——AI大模型提示词工程师

文章目录 AI大模型提示词工程师1 Prompt工程之原理1.1 AIGC的发展和产业前景前言AIGC时代的到来发展趋势和应用展望 1.2 大模型的类型和特点大模型的对比上手特点 1.3 大模型技术原理和发展成语接龙和暴力穷举ChatGPT如何理解人类语言如何存储数据图像存储电脑存数字如何让电脑…

商智C店H5性能优化实战

前言 商智C店,是依托移动低码能力搭建的一个应用,产品面向B端商家。随着应用体量持续增大,考虑产品定位及用户体验,我们针对性能较差页面做了一次优化,并取得了不错的效果,用户体验值(UEI&…

面部识别技术的突破:IP-Adapter-FaceID实现上传照片秒变多面人生

IP-Adapter-FaceID通过上传个人照片,仅需几分钟即可克隆一个高度真实的个性化面部图像。IP-Adapter-FaceID的独特之处在于,它不仅捕捉到个体的基本外貌特征,更深入地嵌入了面部识别模型的面部ID,使生成的图像在细节上更为准确和逼…

前端--基础 常用标签-超链接标签 外部链接( herf 和 target)

目录 超链接标签 &#xff1a; 超链接的语法格式 &#xff1a; 超链接的属性 &#xff1a; 超链接的分类 &#xff1a; 外部链接 &#xff1a; 超链接标签 &#xff1a; # 在 HTML 标签中&#xff0c;<a> 标签用于定义超链接&#xff0c;作用是从一个页面…

cookie和session、请求转发和重定向

会话 分为有状态会话和无状态会话 在HTML中&#xff0c;"会话"一般指的是Web服务器与客户端&#xff08;通常是浏览器&#xff09;之间进行的一系列请求和响应。它是一种在网络上模拟人与人之间通信的方式&#xff0c;常见于Web应用程序中。 会话、Cookie和Sessio…