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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值