Spring Security笔记

news2025/1/14 0:58:24

创建个项目

 

 引入Spring Web和Spring Security 即可

 

 写个Controller接收请求  转发重定向都可以

 static下定义两个页面

login.html页面  用来登录

main.html如果可以跳到这里,说明登录成功

启动运行程序

我们访问登录接口 或者是访问静态资源都会重定向到这个页面

 这个页面说明 Spring Security已经生效

任何访问资源,都需要此操作登录再操作    

用户名 user

密码是启动时在控制台输出的这串    且每次启动都是不一样的

也就是说引入Spring Security依赖后,对接口访问和静态页面的访问都进行了控制

首先,第一点,即使我不觉得你的登录页面丑,用户名,密码总要去数据库查询出来的,不可能,每次用user,然后去看控制台

那么需要实现两个接口

UserDetailsService 和 PasswordEncode 命名也好记

现在大概了解下UserDetailsService

 

 返回的这个UserDetails

 而返回的UserDetails也是个接口,正常肯定由个实现类

。。。。。

 注意User这个类,可能和我们平时定义的User注意要区分,另外  User里面的password是数据库查出来的,而不是前端传进来的

大概原理是这样,前端传进来一个userName,然后我们去查数据库,没有,那么就没有,有的话,将密码,权限,什么乱七八糟的交给它

我们需要自定用户名密码这些的话,除了要实现UserDetailsService还要实现PasswordEncode

大概了解下PasswordEncode

 其实在我们引入Spring Security时候可以看出来  Spring Security自带默认肯定有这么个实例了

 

 测试一下这个加密

那么Spring Security是如果判断加密后的密码和原来的密码是否相同呢

 且加密后的密码是单向的,不知道的原始密码是无法破解,.......这个无法破解还是算了

那么这里就是大概原理了解了一点点  一丢丢

那么可以这么说:这个PasswordEncode就是对我从数据库通过用户名找到的密码进行加解密的

下面我们来实现自定义的登录逻辑:但是Spring Security有要求,就是你要实现自定义的登录逻辑,需要容器内先要有个PasswordEncode的实例

需要写个配置类

 另外还要写个类实现UserDetailsService接口

现在启动程序   控制台不再打印密码

 输入admin  123456就可以访问了

自定义登录逻辑就写完了

那么如何自定义登录页面呢

实现自定义登录页面很简单

让原先定义的配置类 继承 WebSecurityConfigurerAdpter

 

这样一来,Spring Security就将页面访问控制权交给了我们自己  它的页面就失效

但是随之带来的问题是,我们现在既可以访问login.html   main.html 好像访问控制权限已经完全失效了

那么就需要授权方面的一些什么什么什么的

重新启动程序,发现所有页面又都没不能访问了

上面的写法意思就是所有请求,都必须认证,  也就是说,这样写,把门都堵死了,那么开个门

启动程序

但是又出现个问题,就是登录没有反应 

 发现Spring Security并没有拦截我们的登录请求,就是根本没进这个方法来

还是没反应   关闭csrf防护  不知道

现在登录终于访问方法了

 但是放心debug后  页面报错

原因时,登录成功后没有指定跳转到哪个页面 

控制器根本没进来,也就是一切还是Spring Security控制着

需要告诉Spring Security登录成功后跳转到哪个页面 

启动 

 原因在于Spring Security要求  登录成功后的跳转页面必须是Post请求

 

 也就是说原先的登录就是摆设

,当用户名,密码输入错误的时候,  比如说,当某些时候,业务需要让它去error页面的情况如何操作呢

先自定一个error页面

 

 

 如果登录失败

 

关于设置请求账户和密码的参数名

 那么Spring Security具体是怎么做到的

查看UsernamePasswordAuthenticationFilter

 原来你是这么干的

 如何改掉固定参数名

这样的话就改掉了,那么我们自定义的登录页面也需要修改下

 

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

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

相关文章

并发编程(多线程)

一、进程与线程 多进程编程已经能够解决并发编程的问题了(已经可以利用cpu多核资源了).但是仍然存在这缺陷. 就是,进程太重了(消耗资源多,速度慢),线程应运而生被称为"轻量级编程",解决并发编程的各种问题的同时,让IO速度大大提升. 线程"轻"主要"轻…

SOFAEnclave:蚂蚁金服新一代可信编程环境,让机密计算为金融业务保驾护航102年

引言 互联网金融本质上是对大量敏感数据的处理以及由此沉淀的关键业务智能。近年来涌现出来的新业态更是将数据处理的范畴从单方数据扩展到了涉及合作方的多方数据。 另一方面,从 GDPR 到 HIPAA,数据隐私监管保护的范围愈加扩大,力度日益增…

app逆向 || x动

声明 本文仅供学习参考,如有侵权可私信本人删除,请勿用于其他途径,违者后果自负! 如果觉得文章对你有所帮助,可以给博主点击关注和收藏哦! 本文适用于对安卓开发和Java有了解的同学! 文中涉及的app均放在…

运行Dlinknet提取道路和水体(总结帖)——全流程步骤总结

之前写了很多制作样本然后跑代码的帖子 但由于我也是第一次跑 记录一下自己摸索的过程 因此导致 每一篇的内容很碎 每次我想自己去回顾一下的时候 都有太多摸索尝试的过程了 因此我在这里总结一下我摸索的整个过程的详细步骤 大家可以先看这篇再去我的对应博客里面看具体的细节…

【C++逆向】虚表(Virtual table)

什么是多态 定义一个虚基类ISpeaker class ISpeaker{ protected:size_t b; public:ISpeaker( size_t _v ): b(_v) {}virtual void speak() 0; };有两个子类,都实现了虚函数speak(): class Dog : public ISpeaker { public:Dog(): ISpeaker(0){}//vir…

Gin操作MySQLd的增加修改删除的Restful风格的API

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文 目录 一、gin是什么? 二、gin- mysql 1.gin-mysql 2.CRUD的gin的mysql 通过jsontool

Win10忘记开机密码无法进入桌面怎么办?

Win10忘记开机密码无法进入桌面怎么办?有用户设置了电脑的开机密码之后,因为一段时间没有去开机使用电脑了,导致将开机的密码忘记了。那么这个情况下我们怎么去进行电脑的开机呢?接下来我们来看看详细的解决方法分享吧。 解决方法…

SpringCore RCE 1day漏洞复现(NSSCTF Spring Core RCE)

漏洞描述: 作为目前全球最受欢迎的Java轻量级开源框架,Spring允许开发人员专注于业务逻辑,简化Java企业级应用的开发周期。 但在Spring框架的JDK9版本(及以上版本)中,远程攻击者可在满足特定条件的基础上,通过框架的…

【学习笔记】【Pytorch】一、卷积层

【学习笔记】【Pytorch】一、卷积层学习地址主要内容一、卷积操作示例二、Tensor(张量)是什么?三、functional.conv2d函数的使用1.使用说明2.代码实现四、torch.Tensor与torch.tensor区别五、nn.Conv2d类的使用1.使用说明2.代码实现六、卷积公…

基于servlet+mysql+jsp实现鞋子商城系统

基于servletmysqljsp实现鞋子商城系统一、系统介绍1、系统主要功能:2、环境配置二、功能展示1.主页(客户)2.用户登陆、个人中心(客户)3.商品分类(客户)3.我的购物车(客户)4.我的订单(客户)5.订单…

微信小程序页面导航、编程式导航、页面事件、生命周期和WXS脚本

文章目录页面导航1.导航到tarBar页面2.导航到非 tabBar 页面3.后退导航编程式导航1.导航到tabBar页面2.导航到非 tabBar 页面3.后退导航导航传参1. 声明式导航传参2. 编程式导航传参3. 在 onLoad 中接收导航参数页面事件下拉刷新上拉触底数据请求获取中添加loading效果,请求完毕…

一本修炼秘籍,带你打穿文件上传的21层妖塔(1)

目录 前言 引子 第一层:JS限制——你在玩一种很新的防御 第二层:Content-Type限制——我好像在哪见过你 第三层:黑名单绕过——让我康康! 前言 🍀作者简介:被吉师散养、喜欢前端、学过后端、练过CTF、…

Jetpack Compose中的副作用Api

Compose的生命周期 每个Composable函数最终会对应LayoutNode节点树中的一个LayoutNode节点,可简单的为其定义生命周期: onActive: 进入重组作用域, Composable对应的LayoutNode节点被挂接到节点树上onUpdate:触发重组&#xff0c…

Dolphin scheduler在Windows环境下的部署与开发

这里写自定义目录标题环境介绍WSL2工程下载修改POM文件java版本mysql驱动修改mysql密码IDEA配置JDK8模块导出运行配置环境介绍 MySql:8.0.31 JDK:17 需要安装windows的wsl2 WSL2 首先安装好WSL2,并且通过 sudo apt-get install openjdk-17…

类模板与模板类

#include <stdio.h>#include <iostream>using namespace std;//注意必须将类的声明和定义写在同一个.h文件中 未来把它包含进来//写上关键字template 和模板参数列表template<typename T, int KSize, int KVal>class MyArray{public:MyArray();//当在类内定义…

正点原子STM32(基于HAL库)2

目录STM32 基础知识入门寄存器基础知识STM32F103 系统架构Cortex M3 内核& 芯片STM32 系统架构存储器映射寄存器映射新建寄存器版本MDK 工程STM32 基础知识入门 寄存器基础知识 寄存器&#xff08;Register&#xff09;是单片机内部一种特殊的内存&#xff0c;它可以实现…

【自学Docker】Docker HelloWorld

Docker HelloWorld Docker服务 查看Docker服务状态 使用 systemctl status docker 命令查看 Docker 服务的状态。 haicoder(www.haicoder.net)# systemctl status docker我们使用 systemctl status docker 命令查看 Docker 服务的状态&#xff0c;显示结果如下图所示&#…

HotPDF Delphi PDF编译器形成PDF文档

HotPDF Delphi PDF编译器形成PDF文档 HotPDF Delphi PDF编译器支持通过内部和外部链接完全形成PDF文档。计算机还完全支持Unicode。此外&#xff0c;在您的产品和软件中使用此计算机的最新功能&#xff0c;您可以指定加密、打印和编辑PDF文档的能力。当您加密PDF文档时&#xf…

Markdown总结

为什么要使用Markdowm 什么是Markdown?为什么需要使用Markdown&#xff1f; Markdown 是一种轻量级标记语言&#xff0c;它允许人们使用易读易写的纯文本格式编写文档。 Markdown 语言在 2004 由约翰格鲁伯&#xff08;英语&#xff1a;John Gruber&#xff09;创建。 Markdo…

openEuler 社区 2022 年 12 月运作报告

社区活跃度在社区所有开发者和用户的共同参与下&#xff0c;openEuler的3年持续迸发活力&#xff01;从0到超过1.27万名开发者&#xff0c;从0到超过100万的社区用户&#xff0c;从0到超过750家企业伙伴加入社区……截至目前&#xff0c;在大家的持续贡献下&#xff0c;openEul…