Spring Security with Spring Boot 2.0:密码编码器

在上一篇文章中,我们使用了用户详细信息服务,以便提供一种基于给定用户名从函数加载数据的方法。

用户详细信息的实现可能由内存机制,sql / no-sql数据库等支持。
选项是无限的。

关于密码存储,我们必须注意的是密码哈希。
出于安全原因,我们希望以散列形式存储密码。
假设有人未经授权访问了存储我们用户数据的表。 通过存储密码明文,用户可以检索系统中每个用户的密码。

因此,我们需要一种在将密码存储到数据库之前对密码进行哈希处理的方法。
始终注意,您的哈希必须健壮并且是最新的。
例如,MD5在过去非常流行,但如今导致安全性差。 实际上,如果使用gpu,可以很容易地破解MD5密码。 密码编码器弹簧

当涉及到密码编码时,Spring Security为我们提供了开箱即用的功能。
密码编码器是在授权过程中使用的接口。

package org.springframework.security.crypto.password;public interface PasswordEncoder {String encode(CharSequence rawPassword);boolean matches(CharSequence rawPassword, String encodedPassword);}

编码功能将用于编码您的密码,而matches功能将检查您的原始密码是否与编码后的密码匹配。 一旦您的用户详细信息服务从数据库中获取了用户信息,然后将使用从数据库中获取的密码来验证提供给授权的密码。 在这种情况下,spring将使用matchs函数。

现在,spring为我们提供了密码编码器的各种实现。
让我们尝试创建一个密码编码器bean。

package com.gkatzioura.security.passwordencoder.security;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.crypto.password.PasswordEncoder;@Configuration
public class PasswordEncoderConfig {@Beanpublic PasswordEncoder passwordEncoder() {return new PasswordEncoder() {@Overridepublic String encode(CharSequence rawPassword) {return rawPassword.toString();}@Overridepublic boolean matches(CharSequence rawPassword, String encodedPassword) {return rawPassword.toString().equals(encodedPassword);}};}
}

该bean与Spring Boot附带的NoOpPasswordEncoder没什么不同。
不,我们将做一个小实验并添加一个自定义密码编码器。
我们的密码编码器会将用户提交的明文密码进行哈希处理,然后将其与数据库中等效用户已哈希的密码进行比较。

为了进行哈希处理,我们将使用bcrypt。

@Beanpublic PasswordEncoder customPasswordEncoder() {return new PasswordEncoder() {@Overridepublic String encode(CharSequence rawPassword) {return BCrypt.hashpw(rawPassword.toString(), BCrypt.gensalt(4));}@Overridepublic boolean matches(CharSequence rawPassword, String encodedPassword) {return BCrypt.checkpw(rawPassword.toString(), encodedPassword);}};}

为了测试这一点,我们将使用前面的文章中介绍的环境变量来设置安全性。

首先,我们需要对密码进行编码。 我们的系统不会以任何明文形式存储密码。

System.out.println(BCrypt.hashpw("user-password",BCrypt.gensalt(4)));
$2a$04$i4UWtMw6surai4dQMhoKSeLddi1XlAh2sSyG58K3ZvBHqVkhz8Y3y

因此,我们下一步要做的是在运行Spring Boot应用程序之前设置环境变量。

SPRING_SECURITY_USER_NAME=test-user
SPRING_SECURITY_USER_PASSWORD=$2a$04$i4UWtMw6surai4dQMhoKSeLddi1XlAh2sSyG58K3ZvBHqVkhz8Y3y

下一步是转到登录屏幕,并为凭据提供用户名和用户密码。
如您所见,您刚刚通过了身份验证。
在后台,spring散列了您提交的密码,并将其与通过环境变量存在的密码进行了比较。

翻译自: https://www.javacodegeeks.com/2018/06/security-spring-boot-password-encoder.html

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

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

相关文章

第十二届蓝桥杯省赛:试题 A: 卡片(Java)

本题总分:5 分 【问题描述】 小蓝有很多数字卡片,每张卡片上都是数字0到9。 小蓝准备用这些卡片来拼一些数,他想从1开始拼出正整数,每拼一个,就保存起来,卡片就不能用来拼其它数了。 小蓝想知道自己能从1拼…

循环自相关函数和谱相关密度(二)——实信号、复信号模型下的BPSK信号循环谱推导

说明:接上一节循环自相关函数和谱相关密度(一)——公式推导 7 BPSK信号谱相关密度函数 7.1 实信号模型 BPSK实信号表达式可以写为 r(t)y(t)n(t)r(t) y(t) n(t)r(t)y(t)n(t) s(t)p(t)n(t) s(t)p(t) n(t)s(t)p(t)n(t) ∑n−∞∞a(nT)q(t−…

第十二届蓝桥杯A组省赛填空题Java思路及代码合集(相乘直线货物摆放路径回路计数)

文章目录试题 A: 相乘试题 B: 直线试题 C: 货物摆放试题 D: 路径试题 E: 回路计数试题 A: 相乘 本题总分:5 分 【问题描述】 小蓝发现,他将 1 至 1000000007 之间的不同的数与 2021 相乘后再求除以1000000007 的余数,会得到不同的数。小蓝想…

循环自相关函数和谱相关密度(三)——实信号、复信号模型下的BPSK信号循环谱MATLAB仿真结果及代码

关注公号【逆向通信猿】,循环谱 说明:接上一节循环自相关函数和谱相关密度(二)——实信号、复信号模型下的BPSK信号循环谱推导 7.5 仿真结果 7.5.1 实BPSK信号 符号速率RB = 40,采样率Fs = 960,载波频率fc = 300,符号数N = 1000,矩形成形。

executor线程池框架_如何使用Java 5 Executor框架创建线程池

executor线程池框架Java 5以Executor框架的形式在Java中引入了线程池,它允许Java程序员将任务提交与任务执行分离。 如果要使用Java进行服务器端编程,则线程池是维护系统可伸缩性,鲁棒性和稳定性的重要概念。 对于那些不熟悉Java中的线程池或…

第十二届蓝桥杯A组省赛试题 I: 双向排序(Java)

试题 I: 双向排序 本题总分:25 分 【问题描述】 给定序列 (a1, a2, , an) (1, 2, , n),即 ai i。 小蓝将对这个序列进行 m 次操作,每次可能是将 a1, a2, , aqi 降序排列, 或者将 aqi , aqi1, , an 升序排列。 请求…

循环自相关函数和谱相关密度(四)——实信号、复信号模型下的QPSK信号循环谱推导

关注公号【逆向通信猿】,口令:循环谱 说明:接上一节循环自相关函数和谱相关密度(三)——实信号、复信号模型下的BPSK信号循环谱MATLAB仿真结果及代码 8 QPSK信号谱相关密度函数 8.1 实信号模型 QPSK实信号表达式可以写为 r ( t ) = y I ( t ) − y Q (

JavaFX技巧29:使布局忽略不可见的节点

在我仍在Swing中实现UI的时候,我曾经是MigLayout的忠实拥护者(“一个布局管理者来统治所有这些,对吗Mikael?”)。 我真正喜欢的功能之一是当组件不可见时可以定义不同的行为。 MigLayout允许我保留现在不可见的组件所占…

第十一届蓝桥杯A组省赛填空试题 A: 门牌制作(Java)

试题 A: 门牌制作 本题总分:5 分 【问题描述】 小蓝要为一条街的住户制作门牌号。 这条街一共有 2020 位住户,门牌号从 1 到 2020 编号。 小蓝制作门牌的方法是先制作 0 到 9 这几个数字字符,最后根据需要将字符粘贴到门牌上,例如…

循环自相关函数和谱相关密度(五)——实信号、复信号模型下的QPSK信号循环谱MATLAB仿真结果及代码

关注公号【逆向通信猿】口令:循环谱 说明:接上一节循环自相关函数和谱相关密度(四)——实信号、复信号模型下的QPSK信号循环谱推导 8.4 仿真结果 8.4.1 实QPSK信号 符号速率RB = 40,采样率Fs = 960,载波频率fc = 300,符号数N = 1000,矩形成形,二倍载波频率为符号速…

第十一届蓝桥杯A组省赛填空试题 B: 既约分数(Java)

试题 B: 既约分数 本题总分:5 分 【问题描述】 如果一个分数的分子和分母的最大公约数是 1,这个分数称为既约分数。 例如,3/4,5/2,1/8,7/1都是既约分数。 请问,有多少个既约分数,分…

C++判断是否为素数、求一个数的因数、质因数分解

判断一个数是否为素数 #include<iostream> #include<vector> #include<math.h> #include<algorithm>/*判断是否为素数*/ bool isprime(int n) {bool result;int k (int)sqrt((double)n); // 只需要循环到 √n 即可int i 0;for (i 2; i < k; i){…

新的JDK 11文件方法isSameContent()

已经建议通过JDK-8202285将名为isSameContents()方法添加到JDK 11中的Files类中[[&#xff08;fs&#xff09;向文件中添加用于比较文件内容的方法”]。 由Joe Wang提议 &#xff0c;此新方法“打算是现有isSameFile方法的扩展&#xff0c;因为它没有比较内容以回答两个文件是否…

第十一届蓝桥杯A组省赛填空试题 C: 蛇形填数(Java)

试题 C: 蛇形填数 本题总分&#xff1a;10 分 【问题描述】 如下图所示&#xff0c;小明用从 1 开始的正整数“蛇形”填充无限大的矩阵。 容易看出矩阵第二行第二列中的数是 5。请你计算矩阵中第 20 行第 20 列 的数是多少&#xff1f; 【答案提交】 这是一道结果填空的题&…

Collatz函数的C++递归实现

Collatz函数为(正)自然数定义如下&#xff1a;collatz(N)&#xff1a;如果n是偶数&#xff0c;则返回n/2&#xff0c;否则返回(n∗3)1 #include <iostream> int Collatz(int n) {if (n % 2 0)n / 2;elsen 3 * n 1;return n; }int main(int argc, char* argv[]) {if (…

AI+药物研发:人工智能赋能新药研发(人工智能应用案例)

首先&#xff0c;生物制药行业面临着两个挑战&#xff1a; 第一&#xff0c;新药研发周期很长且非常复杂&#xff1b; 第二&#xff0c;药物研发过程成本昂贵。在1950年的时候&#xff0c;十亿美元可以研发几十个药&#xff0c;到了2020年之后&#xff0c;十亿美元只能研发一个…

具有CDI和lambda的策略模式

策略设计模式在运行时动态选择一种实现算法&#xff0c;一种策略。 该模式可用于根据情况选择不同的业务算法。 我们可以将不同的算法实现定义为单独的类。 或者&#xff0c;我们利用Java SE 8 lambda和函数&#xff0c;它们在此处充当轻量级策略实现。 CDI能够注入参数化类型…

计算圆周率π的C++实现(任意精度)

π\piπ的计算公式 代码 #include <iostream> #include <corecrt_math_defines.h> #include <iomanip>double compute_pi(int N) //计算pi函数 {double dx 1.0 / N;double pi 0;for (int i 1; i < N; i){pi 2 * sqrt(1 - i * dx*i*dx); // 积分函数}…

第十一届蓝桥杯A组省赛填空试题 D: 七段码(Java)

试题 D: 七段码 本题总分&#xff1a;10 分 【问题描述】 小蓝要用七段码数码管来表示一种特殊的文字。 上图给出了七段码数码管的一个图示&#xff0c;数码管中一共有 7 段可以发光的二极管&#xff0c;分别标记为 a, b, c, d, e, f, g。 小蓝要选择一部分二极管&#xff0…

【弗雷泽岛发射站所需的最小发射功率计算】通信调制体制设计之64QAM性能分析MATLAB仿真及代码

关注公号【逆向通信猿】更精彩!!! 任务背景 弗雷泽岛旅游经理在审查您之前建立无线链路任务的解决方案时,正在研究使用无线链路传输实时安全视频源的可能性。由于来自岛周围的多个安全摄像机的视频信号在传输之前被多路复用,因此无线信道的数据速率是不同的。弗雷泽岛旅…