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中推荐的密码加密器。你可以根据需要替换为其他加密器。

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

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

相关文章

C#类型基础Part1-值类型与引用类型

C#类型基础Part1-值类型与引用类型 参考资料前言值类型引用类型装箱和拆箱 参考资料 《.NET之美–.NET关键技术深入与解析》 前言 C#中的类型一共分为两类&#xff0c;一类是值类型&#xff08;Value Type&#xff09;,一类是引用类型&#xff08;Reference Type&#xff09…

Java集合的重点

一、Java集合 Java集合包含一组接口和实现类&#xff0c;底层使用不同类型的数据结构&#xff0c;提供不同特点的存储方式&#xff0c;主要分为两大类&#xff1a; Collection单列集合和Map键值对集合。 1.Collection接口用于表示单例集合&#xff0c;主要包括三个子接口&am…

24年支付行业概况与未来

​ 一、行业背景介绍 支付行业作为现代金融体系的基石&#xff0c;正经历着前所未有的变革。随着科技的发展和人们对便捷支付方式的需求不断提高&#xff0c;支付行业在近年来得到了迅猛发展。在我国&#xff0c;支付行业经过多年的发展和市场竞争&#xff0c;已经形成了多元化…

为什么 Vue Router 的 History 模式和 React Router 的 Browser 模式需要服务器支持?

Vue Router 的 history 模式和 React Router 的 Browser 模式使用的是 HTML5 的 History API&#xff0c;它允许你修改浏览器地址栏的 URL 而不发送请求到服务器。这种方式可以创建干净的 URL&#xff0c;没有 # 符号&#xff0c;看起来就像传统的服务器端路由。 然而&#xf…

Navicat 17 新特性 | Navicat BI 功能革新升级,助力企业深度挖掘数据潜能

随着 Navicat 17 的发布&#xff0c;在业界引起了广泛的共鸣与热议。我们曾深入剖析其众多革新特性&#xff0c;包括模型设计创新与优化、高效的查询与配置、用户界面交互体验再升级&#xff0c;原生适配国产平台和操作系统和数据字典提升数据结构清晰度&#xff0c;这些新特性…

【第12章】Spring Cloud之集成 Spring Cloud Gateway

文章目录 前言一、新建项目1. 项目结构2. 引入依赖3. 启动类4. 基本配置 二、新建配置三、新建服务1. 提供者2. 消费者 四、单元测试1. 启动网关服务2. 提供者3. 消费者 总结 前言 Spring Cloud Gateway是一个基于Spring Framework 5、Spring Boot 2和Project Reactor等技术构…

python的csv库常用操作

csv 模块是 Python 标准库中的一个模块&#xff0c;用于处理 CSV&#xff08;逗号分隔值&#xff09;文件。它提供了简单易用的功能来读取和写入 CSV 文件。以下是一些常用的操作&#xff1a; 一、读取 CSV 文件 新建文件data.csv&#xff0c;内容如下&#xff1a; 使用 csv.…

浪潮自研交换机系列常见问题处理

CN61108PC-V-H 不能PING通任何地址&#xff0c;也不能被PING 输入ip traceroute enable既可。注意视图 交换机通过console口远程登录至其他交换机&#xff0c;掉线后console口无法使用 例如有2台交换机A和B&#xff0c;在A交换机上插上console线登录后&#xff0c;在A通过SSH…

nodejs安装及环境配置建材商城管理系统App

✌网站介绍&#xff1a;✌10年项目辅导经验、专注于计算机技术领域学生项目实战辅导。 ✌服务范围&#xff1a;Java(SpringBoo/SSM)、Python、PHP、Nodejs、爬虫、数据可视化、小程序、安卓app、大数据等设计与开发。 ✌服务内容&#xff1a;免费功能设计、免费提供开题答辩P…

如何应对Android面试官 -> 常用数据结构如何进行优化

前言 本章我们开始讲解性能优化相关的话题&#xff0c;首先我们来看下数据结构如何优化&#xff1a; 性能优化 性能优化的本质&#xff1a;线上 APM 的性能监控&#xff0c;而性能监控通常是以下技术点 ByteCode、Hook&#xff08;PLT Hook&#xff09;、JS注入&#xff08;采…

tslib 库-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

tslib 库 tslib 简介 tslib 库&#xff0c;这是 Linux 系统下&#xff0c;专门为触摸屏开发的应用层函数库&#xff0c;开源 功能与作用&#xff1a;作为触摸屏驱动和应用层之间的适配层&#xff0c;封装了读取和解析触摸屏数据的复杂过程&#xff0c;提供API接口 数据处理&…

MyBatis 插件机制、分页插件如何实现的

MyBatis 插件机制允许开发者在 SQL 执行的各个阶段&#xff08;如预处理、执行、结果处理等&#xff09;中插入自定义逻辑&#xff0c;从而实现对 MyBatis 行为的扩展和增强。以下是 MyBatis 插件运行原理的详细介绍&#xff1a; 插件接口 MyBatis 插件通过实现 org.apache.i…

c++ 高精度加法(只支持正整数)

再给大家带来一篇高精度&#xff0c;不过这次是高精度加法&#xff01;话不多说&#xff0c;开整&#xff01; 声明 与之前那篇文章一样&#xff0c;如果看起来费劲可以结合总代码来看 定义 由于加法进位最多进1位&#xff0c;所以我们的结果ans[]的长度定义为两个加数中最…

零基础学SpringBoot(一)--初识SpringBoot

1. SpringBoot简介 SpringBoot 是Spring家族中的一个全新的框架&#xff0c;它用来简化Spring应用程序的创建和开发过程&#xff0c;也可以说Spring Boot能简化我们之前采用SSM(SpringMVC Spring MyBatis)框架进行开发的过程。 以前我们采用SSM框架进行开发的时候&#xff0c…

vue3前端开发-小兔鲜项目-二级分类页面无限加载的实现

vue3前端开发-小兔鲜项目-二级分类页面无限加载的实现&#xff01;实际的项目开发中&#xff0c;经常会遇到这需求。产品内容庞大&#xff0c;但是用户不可能一次性全部都加载请求的。当客户向下滚动&#xff0c;触碰到插件的底部时&#xff0c;会再次申请下一页内容。这样就会…

Adobe国际认证详解-动漫制作专业就业方向和前景

动漫制作专业的就业方向和前景随着创意产业的蓬勃发展而愈发广阔。这一专业涵盖了从角色设计、场景绘制到动画制作、特效合成等多个环节&#xff0c;是创意与技术相结合的典型代表。随着数字媒体和互联网的普及&#xff0c;动漫制作专业人才的需求正不断增长&#xff0c;为该专…

2024 杭电多校第一场

目录 目录 树 博弈 传送 树 给一棵根为 1 的有根树&#xff0c;点 i 具有一个权值 Ai 。 定义一个点对的值 f(u,v)max(Au,Av)|Au−Av| 。 你需要对于每个节点 i &#xff0c;计算 ansi∑u∈subtree(i),v∈subtree(i)f(u,v) &#xff0c;其中 subtree(i) 表示 i 的子树。 请…

Hadoop中HDFS、Hive 和 HBase三者之间的关系

HDFS&#xff08;Hadoop Distributed File System&#xff09;、Hive 和 HBase 是 Hadoop 生态系统中三个重要的组件&#xff0c;它们各自解决了大数据存储和处理的不同层面的问题。我们用大白话来解释这三个组件之间的关系&#xff1a; HDFS - 数据的仓库&#xff1a; HDFS 是…

Vscode离线下载对应版本的ms-python.vsix

一、查看vscode的版本号和发行时间 vscode界面中Help-About查看版本号和发行时间&#xff0c;ms-python的发行时间需要和这个时间相近&#xff1a; 二、在github仓库中查看ms-python有什么版本&#xff0c;以及发行时间 github仓库路径 https://github.com/microsoft/vsco…

虚幻引擎,体积雾、体积光、镜头泛光

1、体积雾 这里介绍的是用于地面的体积雾效果&#xff0c;效果如图1-1&#xff1a; 图1-1 首先&#xff0c;需要场景中存在指数级高度雾并开启体积雾&#xff08;如图1-2&#xff09;。然后创建材质&#xff0c;材质域选择“体积”&#xff0c;混合模式选择“Additive”。材质节…