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

spring security如何适配盐存在数据库中的密码

19.token认证过滤器代码实现_哔哩哔哩_bilibili19.token认证过滤器代码实现是SpringSecurity框架教程-Spring Security+JWT实现项目级前端分离认证授权-挑战黑马&尚硅谷的第20集视频,该合集共计41集,视频收藏或关注UP主,及时了解更多相关视频内容。icon-default.png?t=N7T8https://www.bilibili.com/video/BV1mm4y1X7Hc?p=20&vd_source=f230e9aa60a5cb08b03651a4c59ce1ab把通过认证的用户信息存入SecurityContextHolder是关键,这样最终把关的过滤器才能通过SecurityContextHolder上下文判断这个请求是否放行

基础入门教程,适合无经验初学者:

springsecurity+jwt+oauth2.0入门到精通,Spring技术栈之spring安全架构视频教程_哔哩哔哩_bilibilispringsecurity+jwt+oauth2.0入门到精通,Spring技术栈之spring安全架构视频教程共计37条视频,包括:001_学习目标、002_SpringSecurity简介、003_入门Demo等,UP主更多精彩视频,请关注UP账号。icon-default.png?t=N7T8https://www.bilibili.com/video/BV19X4y1w74W/?spm_id_from=333.999.0.0&vd_source=f230e9aa60a5cb08b03651a4c59ce1ab升级教程,适合学习原理:

00.课程特点_哔哩哔哩_bilibili00.课程特点是SpringSecurity框架教程-Spring Security+JWT实现项目级前端分离认证授权-挑战黑马&尚硅谷的第1集视频,该合集共计41集,视频收藏或关注UP主,及时了解更多相关视频内容。icon-default.png?t=N7T8https://www.bilibili.com/video/BV1mm4y1X7Hc?p=1&vd_source=f230e9aa60a5cb08b03651a4c59ce1ab实战教程,适合拷贝源码直接应用:

18.整合Spring Security和jwt token_哔哩哔哩_bilibili菜鸡程序员一枚,带你从零到一用SpringBoot3+Vue3写一个简单的教务管理系统,可以作为毕设也可以做一个练手的项目,大佬勿喷😭, 视频播放量 1069、弹幕量 0、点赞数 14、投硬币枚数 10、收藏人数 35、转发人数 4, 视频作者 常磐华乃の刀哥, 作者简介 ,相关视频:SpringBoot3.0+VUE3.0+Mybatis-Plus+Redis+Sa-Token+微信小程序+TDesignUI翻新个人运动管理平台,16.新增用户及校验表单,28.课程表的增删改接口编写,基于SpringBoot3+Vue3的教务管理系统项目 可用于计算机毕设也可当作练手项目,【黑马博学谷2024】又狂又野狂野架构师,一周用Java手写(Spring、springboot、netty、mybatis、rpc、线程池、分布式事务)框架源码,这绝对是秋招面试天花板!,13.参数校验,27.完善课程信息的展示,24.课程信息分页查询,21.配置mp的插入和更新icon-default.png?t=N7T8https://www.bilibili.com/video/BV13w411s7fw/?spm_id_from=333.337.search-card.all.click&vd_source=f230e9aa60a5cb08b03651a4c59ce1ab源码:

https://github.com/Kww0k/ims-projecticon-default.png?t=N7T8https://github.com/Kww0k/ims-project

[惊喜]

Spring Security可以通过配置AuthenticationProvider来适配在数据库中存储的密码。你需要实现一个自定义的AuthenticationProvider,使用Spring Security的加密功能来比较数据库中的加密密码和提供的密码。

以下是一个简化的例子:

  1. 首先,确保你的数据库中存储的是加密后的密码。

  2. 实现自定义的AuthenticationProvider,使用合适的加密方法和比较方式。

 
 

import org.springframework.security.authentication.AuthenticationProvider;

import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;

import org.springframework.security.core.Authentication;

import org.springframework.security.core.AuthenticationException;

import org.springframework.security.crypto.password.PasswordEncoder;

public class DatabaseAuthenticationProvider implements AuthenticationProvider {

private UserDetailsService userDetailsService;

private PasswordEncoder passwordEncoder;

public DatabaseAuthenticationProvider(UserDetailsService userDetailsService, PasswordEncoder passwordEncoder) {

this.userDetailsService = userDetailsService;

this.passwordEncoder = passwordEncoder;

}

@Override

public Authentication authenticate(Authentication authentication) throws AuthenticationException {

String username = authentication.getName();

String password = authentication.getCredentials().toString();

// 这里从数据库获取用户详情并进行加密密码的比较

UserDetails user = userDetailsService.loadUserByUsername(username);

if (passwordEncoder.matches(password, user.getPassword())) {

return new UsernamePasswordAuthenticationToken(user, password, user.getAuthorities());

}

throw new BadCredentialsException("Authentication failed");

}

@Override

public boolean supports(Class<?> authentication) {

return authentication.equals(UsernamePasswordAuthenticationToken.class);

}

}

  1. 在Spring Security配置中注册这个AuthenticationProvider

 
 

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;

import org.springframework.security.config.annotation.web.builders.HttpSecurity;

import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;

import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

import org.springframework.security.core.userdetails.UserDetailsService;

import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

import org.springframework.security.crypto.password.PasswordEncoder;

@Configuration

@EnableWebSecurity

public class SecurityConfig extends WebSecurityConfigurerAdapter {

private UserDetailsService userDetailsService;

private PasswordEncoder passwordEncoder;

public SecurityConfig(UserDetailsService userDetailsService) {

this.userDetailsService = userDetailsService;

this.passwordEncoder = new BCryptPasswordEncoder();

}

@Bean

public AuthenticationProvider authenticationProvider() {

return new DatabaseAuthenticationProvider(userDetailsService, passwordEncoder);

}

@Override

protected void configure(AuthenticationManagerBuilder auth) throws Exception {

auth.authenticationProvider(authenticationProvider());

}

@Override

protected void configure(HttpSecurity http) throws Exception {

// 配置HTTP安全性相关设置

}

}

确保你的UserDetailsService实现能够从数据库中加载用户详情,并且密码是加密的。PasswordEncoder用于比较提供的密码和数据库中存储的加密密码。

这个例子使用了BCryptPasswordEncoder,它是Spring Security中推荐的密码加密器。你可以根据需要替换为其他加密器。

相关文章:

spring security如何适配盐存在数据库中的密码

19.token认证过滤器代码实现_哔哩哔哩_bilibili19.token认证过滤器代码实现是SpringSecurity框架教程-Spring SecurityJWT实现项目级前端分离认证授权-挑战黑马&尚硅谷的第20集视频&#xff0c;该合集共计41集&#xff0c;视频收藏或关注UP主&#xff0c;及时了解更多相关视…...

Go语言编程 学习笔记整理 第2章 顺序编程 后半部分

1.流程控制 1.1 条件语句 if a < 5 { return 0 } else { return 1 } 注意&#xff1a;在有返回值的函数中&#xff0c;不允许将“最终的”return语句包含在if...else...结构中&#xff0c; 否则会编译失败&#xff01;&#xff01;&#xff01; func example(x int) i…...

美团后端二面

美团后端二面 ……………………………… 两道场景 一道 数字转中文读法&#xff08;1000-》一千&#xff09; 0八股0自我介绍 反问 “您觉得我能过吗&#xff1f;” “这个需要横行对比之后才能有结果” ……………………………… 什么时候到岗 场景题 1 假设我有一个…...

学懂C语言(十六):对C语言作用域规则 局部变量、全局变量的认识

一、C 作用域规则 任何一种编程中&#xff0c;作用域是程序中定义的变量所存在的区域&#xff0c;超过该区域变量就不能被访问。C 语言中有三个地方可以声明变量&#xff1a; 局部变量&#xff1a;在函数或块内部全局变量&#xff1a;在所有函数外部形式参数&#xff1a;在函数…...

关于TS(typescript)的理论知识

关于TS&#xff08;typescript&#xff09;的理论知识 TypeScript 是一种由微软开发的开源编程语言&#xff0c;它是 JavaScript 的一个超集&#xff0c;添加了可选的静态类型和基于类的面向对象编程。TypeScript 最终会被编译成纯 JavaScript 代码&#xff0c;以便在任何支持 …...

【OpenCV C++20 学习笔记】基本图像容器——Mat

【OpenCV C20 学习笔记】基本图像容器——Mat 概述Mat内部结构引用计数机制颜色数据格式 显式创建Mat对象使用cv::Mat::Mat构造函数矩阵的数据项 使用数组进行初始化的构造函数cv::Mat::create函数MATLAB风格的初始化小型矩阵通过复制创建Mat对象 Mat对象的输出其他普通数据项的…...

枚举单例是怎么保证线程安全和防止反射的

枚举单例在Java中具有天然的线程安全性和防止反射攻击的特性&#xff0c;这是由于Java对枚举类型的特殊处理方式。以下是详细解释&#xff1a; 1. 线程安全性 Java 枚举类的特性 类加载机制&#xff1a;枚举类型在Java中是特殊的类&#xff0c;由JVM保证其线程安全性。枚举类…...

传知代码-智慧医疗:纹理特征VS卷积特征(论文复现)

代码以及视频讲解 本文所涉及所有资源均在传知代码平台可获取 论文链接&#xff1a;https://www.sciencedirect.com/science/article/abs/pii/S1076633223003537?__cf_chl_rt_tkJ9Aipfxyk5d.leu48P20ePFNd4B2aunaSmzVpXCg.7g-1721292386-0.0.1.1-6249 论文概述 今天我们把视线…...

数据结构中的八大金刚--------八大排序算法

目录 引言 一&#xff1a;InsertSort(直接插入排序) 二&#xff1a;ShellSort(希尔排序) 三&#xff1a;BubbleSort(冒泡排序) 四&#xff1a; HeapSort(堆排序) 五&#xff1a;SelectSort(直接选择排序) 六&#xff1a;QuickSort(快速排序) 1.Hoare版本 2.前后指针版本 …...

ACC2.【C语言】经验积累 栈区简单剖析

int main() {int i0;int arr[10]{1,2,3,4,5,6,7,8,9,10};for (i0;i<12;i){arr[i]0;printf("A");}return 0; } 执行后无限打印A 在VS2022&#xff0c;X86,Debug环境下&#xff0c;用监视后&#xff0c;原因是arr[12]的地址与i的地址重合&#xff08;数组越界&…...

c# 索引器

索引器&#xff08;Indexer&#xff09;允许你像访问数组一样&#xff0c;通过索引访问对象的属性或数据。索引器的主要用途是在对象内部封装复杂的数据结构&#xff0c;使得数据访问更加直观。下面是关于 C# 索引器的详细解释及示例&#xff1a; 基本语法 索引器的语法类似于…...

低代码如何加速数字化转型

数字化转型&#xff0c;正日益决定企业成功的关键。这里的一个关键因素是它可以以更快的速度和质量来实施技术计划。在当今瞬息万变的商业环境中&#xff0c;战略性地采用低代码平台对于旨在加快上市时间、增强业务敏捷性和促进跨团队无缝协作的首席技术官来说至关重要。日益增…...

Pytest进阶之fixture的使用(超详细)

目录 Fixture定义 Fixture使用方式 作为参数使用 Fixture间相互调用(作为参数调用) 作为conftest.py文件传入 Fixture作用范围Scope function class module session Fixture中params和ids Fixture中autouse Fixture中Name 总结 pytest fixture 是一种用来管理测试…...

GitHub 详解教程

1. 引言 GitHub 是一个用于版本控制和协作的代码托管平台&#xff0c;基于 Git 构建。它提供了强大的功能&#xff0c;使开发者可以轻松管理代码、追踪问题、进行代码审查和协作开发。 2. Git 与 GitHub 的区别 Git 是一个分布式版本控制系统&#xff0c;用于跟踪文件的更改…...

边界网关IPSEC VPN实验

拓扑&#xff1a; 实验要求&#xff1a;通过IPSEC VPN能够使PC2通过网络访问PC3 将整个路线分为三段 IPSEC配置在FW1和FW2上&#xff0c;在FW1与FW2之间建立隧道&#xff0c;能够传递IKE&#xff08;UDP500&#xff09;和ESP数据包&#xff0c;然后在FW1与PC2之间能够流通数据…...

力扣高频SQL 50题(基础版)第六题

文章目录 1378. 使用唯一标识码替换员工ID题目说明思路分析实现过程结果截图总结 1378. 使用唯一标识码替换员工ID 题目说明 Employees 表&#xff1a; ---------------------- | Column Name | Type | ---------------------- | id | int | | name | varchar | ------…...

在一个事物方法中开启新事物,完成对数据库的修改

在Java中&#xff0c;使用Transactional注解来管理事务非常常见。但是&#xff0c;在一个已经标记为Transactional的方法内部调用另一个也标记了Transactional的方法时&#xff0c;如果不正确处理&#xff0c;可能会导致一些意料之外的行为。这是因为默认情况下&#xff0c;Spr…...

ffmpeg的vignetting filter

vignetting filter是暗角过滤器 vignetting filter在官网是vignette。但是我查了一下&#xff0c;vignetting应该是正确的表达&#xff0c;vignette是什么鬼&#xff1f; 官网参数 官书参数 参数解释 angle,x0,y0可以使用表达式。 angle&#xff1a;不知道什么意思&#xf…...

商场导航系统:从电子地图到AR导航,提升顾客体验与运营效率的智能解决方案

商场是集娱乐、休闲、社交于一体的综合性消费空间&#xff0c;随着商场规模的不断扩大和布局的日益复杂&#xff0c;顾客在享受丰富选择的同时&#xff0c;也面临着寻路难、店铺曝光率低以及商场管理效率低下等挑战。商场导航系统作为提升购物体验的关键因素&#xff0c;其重要…...

vue3中父子组件的双向绑定defineModel详细使用方法

文章目录 一、defineProps() 和 defineEmits()二、defineModel() 的双向绑定2.1、基础示例2.2、定义类型2.3、声明prop名称2.4、其他声明2.5、绑定多个值2.6、修饰符和转换器2.7、修饰符串联 一、defineProps() 和 defineEmits() 组件之间通讯&#xff0c;通过 props 和 emits…...

耳机、音响UWB传输数据模组,飞睿智能低延迟、高速率超宽带uwb模块技术音频应用

在数字化浪潮席卷全球的今天&#xff0c;无线通信技术日新月异&#xff0c;其中超宽带&#xff08;Ultra-Wideband&#xff0c;简称UWB&#xff09;技术以其独特的优势&#xff0c;正逐步成为无线传输领域的新星。本文将深入探讨飞睿智能UWB传输数据模组在音频应用中的创新应用…...

webpack配置报错:Invalid options object.

前言&#xff1a; 今天在使用webpack进行项目配置的时候&#xff0c;运行之后终端报错&#xff1a;Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options has an unknown property inline. Thes…...

Java 并发编程:一文了解 Java 内存模型(处理器优化、指令重排序与内存屏障的深层解析)

大家好&#xff0c;我是栗筝i&#xff0c;这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 022 篇文章&#xff0c;在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验&#xff0c;并希望进…...

谷粒商城实战笔记-64-商品服务-API-品牌管理-OSS前后联调测试上传

文章目录 1&#xff0c;拷贝文件到前端工程2&#xff0c;局部修改3&#xff0c;在品牌编辑界面使用上传组件4&#xff0c;OSS配置允许跨域5&#xff0c;测试multiUpload.vue完整代码singleUpload.vue完整代码policy.js代码 在Web应用开发中&#xff0c;文件上传是一项非常常见的…...

Springboot 开发之 RestTemplate 简介

一、什么是RestTemplate RestTemplate 是Spring框架提供的一个用于应用中调用REST服务的类。它简化了与HTTP服务的通信&#xff0c;统一了RESTFul的标准&#xff0c;并封装了HTTP连接&#xff0c;我们只需要传入URL及其返回值类型即可。RestTemplate的设计原则与许多其他Sprin…...

Django transaction.atomic()事务处理

在Django中&#xff0c;transaction.atomic()是一个上下文管理器&#xff0c;它会自动开始一个事务&#xff0c;并在代码块执行完毕后提交事务。如果在代码块中抛出异常&#xff0c;事务将被自动回滚&#xff0c;确保数据库的一致性和完整性。 在实际应用中&#xff0c;你可能需…...

2024.07-电视版免费影视App推荐和猫影视catvod、TVBox源(最新接口地址)

文章目录 电视版免费影视App推荐精选列表&#xff08;2024.07可用筛选列表&#xff09;&#xff1a;2024.07可用筛选列表&#xff0c;盲盒资源打包合集下载安装说明真的是盲盒&#xff1f; 猫影视catvod、TVBoxTVBox源推荐可用列表目前不可用列表&#xff08;前缀为错误状态码&…...

【Python】 基于Q-learning 强化学习的贪吃蛇游戏(源码+论文)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…...

谷粒商城实战笔记-44-前端基础-Vue-整合ElementUI快速开发/设置模板代码

文章目录 一&#xff0c;安装导入ElementUI1&#xff0c;安装 element-ui2&#xff0c;导入 element-ui 二&#xff0c;ElementUI 实战1&#xff0c;将 App.vue 改为 element-ui 中的后台布局2&#xff0c;开发导航栏2.1 开发MyTable组件2.2 注册路由2.3 改造App.vue2.4 新增左…...

Android adb shell ps进程查找以及kill

Android adb shell ps进程查找以及kill 列出当前Android手机上运行的所有进程信息如PID等&#xff1a; adb shell ps 但是这样会列出一大堆进程信息&#xff0c;不便于定向查阅&#xff0c;可以使用关键词查找&#xff1a; adb shell "ps | grep 关键词" 关键词查…...