使用 Bcrypt 加密 InMemoryAuthentication 密码

2023-11-30

在对 UserDetailsS​​ervice 的自定义实现使用 Bcrypt 之前,我首先想看看是否可以在内存数据库中使用它。

package com.patrick.Security;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
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.NoOpPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    private UserDetailsService userDetailsService;


    @Autowired
    public WebSecurityConfig(UserDetailsService userDetailsService) {
        this.userDetailsService = userDetailsService;
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable().authorizeRequests()
                .antMatchers("/").permitAll()
                .antMatchers(HttpMethod.POST, "/login").permitAll()
                .antMatchers(HttpMethod.POST, "/users").hasAuthority("ADMIN")
                .antMatchers(HttpMethod.POST, "/shifts").hasAnyAuthority("ADMIN", "SUPERVISOR")
                .anyRequest().authenticated()
                .and()
                .addFilter(new AuthenticationFilter(authenticationManager()))
                .addFilter(new AuthorizationFilter(authenticationManager()));
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication().passwordEncoder(passwordEncoder())
                .withUser("admin").password("password").roles("ADMIN");
    }

    @Bean
    public PasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }
}

创建/公开 PasswordEncoder bean 时会弹出此警告,最终阻止我访问登录路径:

o.s.s.c.bcrypt.BCryptPasswordEncoder     : Encoded password does not look like BCrypt

添加已弃用的 NoOpPasswordEncoder 将暂时解决该问题,但显然不会对密码进行编码:

@SuppressWarnings("deprecation")
@Bean
public static NoOpPasswordEncoder passwordEncoder() {
return (NoOpPasswordEncoder) NoOpPasswordEncoder.getInstance();
}

添加 Bcrypt 的正确方法是什么?


创建/公开 PasswordEncoder bean 时会弹出此警告 这最终阻止我访问登录路径:

o.s.s.c.bcrypt.BCryptPasswordEncoder     : Encoded password does not look like BCrypt

这是因为您提供的密码未使用 BCrypt 进行编码。而不是通过"password"直接作为密码,需要先对其进行编码。

出于测试目的,一种简单的方法是获取密码编码器并在配置方法中对其进行编码,如下所示

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    String password = passwordEncoder().encode("password");
    auth.inMemoryAuthentication().withUser("admin").password(password).roles("ADMIN");
}

@Bean
public PasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Bcrypt 加密 InMemoryAuthentication 密码 的相关文章

随机推荐

  • 如何在 Python 中将条件语句与 for 循环结合起来?

    我有一个简单的例子 我认为在 Python 中可以用最少的努力将 if 语句和 for 循环结合起来 鉴于 sublists number1 number2 number3 for sublist in sublists if sublis
  • 从 NSString 获取 ivar 或属性

    我们能得到一个ivar or a property from a NSString就像我们可以得到一个class from a NSString与功能NSClassFromNSString 对于任何属性 您都可以使用 object valu
  • 手机号码验证安卓

    我想通过从用户的手机发送短信来将手机号码验证集成到我的 Android 应用程序中 那么除了向用户的手机发送短信之外 是否有任何 API 允许通过发送短信来验证手机号码 我建议cognalys for android 演示应用程序可在应用商
  • 使用scanf()输入字符的问题

    我正在尝试将一个字符输入到链接列表中 其中该字符可以是 A a G g T t C 或 c 我还不熟悉 C 我知道我在这里搞砸了一些事情 do printf nEnter a new nucleotide n scanf c newChar
  • BigQuery SQL 排除不在空结果中

    我遇到了不返回任何值的问题 数据库中有符合此条件的帐户 有点困惑为什么他们没有被退回 有什么建议么 select accountid from table1 where not in select accountid from table1
  • 如何构建 cURL 并在 Code::Blocks 项目中使用它(静态)

    我知道有很多关于此的主题 但它们都没有帮助我解决我的问题 我只想做一个简单的C 程序使用cURL with 静态库卷曲 没有 DLL 文件 上代码 块 Windows 8 我花了大约 20 个小时尝试这样做 但我发现的都是无用的东西和我不明
  • 位置:Windows Phone 7 中固定

    我正在尝试创建 PhoneGap Windows Phone 7 应用程序 为了模仿应始终在横向屏幕左侧可见的应用程序栏 我想放置一个 div CSS 为position fixed 然而 这不起作用 因为 WP7 上的 IE 似乎不支持它
  • 是否可以使用 MTOM 来响应 CXF RESTful Web 服务

    我在用着CXF 2 2 12我的 Web 服务的库 是否可以使用MTOM 消息传输优化机制 in RESTful回复 希望有任何与此相关的文档 教程的链接 谢谢 MTOM 是特定于 SOAP 的 因此我认为它与 RESTful 架构不兼容
  • 从张量的每个正面切片中提取对角线元素

    我有一个 p p n 张量 我想提取每个 p by p 切片的对角线元素 有谁知道如何在不循环的情况下做到这一点 谢谢 Behold永远强大 永远强大bsxfun for vectorizing MATLAB problems使用非常有效地
  • 如何在IOS sdk(Objective-c)中序列化一个类?

    如何在 Objective C 中序列化以下类 以便它可以与 SBJson 一起使用 当我使用此代码时 出现 动物不支持 JSON 序列化 错误 有人可以指出我哪里出错了吗 Animal h文件的内容如下 import
  • 如何通过publishAdd()通知获取添加的记录(不仅仅是id)?

    Each Sails js模型有方法publishAdd 当新记录添加到关联模型时 这会通知每个侦听器 此通知不包含新创建的记录 所以我必须从客户端发起另一个请求来获取新记录 Sails js 是否有可能发送带有通知的新记录 以便我可以减少
  • 在 java 中完成 FTP 后创建 0 kb 文件

    我正在尝试将文件通过 FTP 传输到远程计算机上 下面是我的代码 FTPClient ftpClient new FTPClient ftpClient connect home abc com ftpClient login remote
  • 如何在文本框中仅允许整数? [复制]

    这个问题在这里已经有答案了 在我的表单中 我希望仅允许在文本框中输入整数值 怎么做 您可以为此使用正则表达式验证器 下面是示例代码
  • 如何在 iOS 中发布 CGImageRef

    我正在编写这个方法来计算图像的平均 R G B 值 以下方法将 UIImage 作为输入并返回包含输入图像的 R G B 值的数组 但我有一个问题 如何 在哪里正确释放 CGImageRef NSArray getAverageRGBVal
  • 实体框架中的关注者架构

    我正在制作一个具有以下功能的应用程序 但我被困在这个问题上 我就这样上来了 public class User public int Id get set public ICollection
  • 运行代码时,如何在 Android Studio 中删除和擦除 USB 设备上保存的数据?

    我的代码使用共享首选项和本地数据库 并将一些数据保存在我的 USB 设备上 我想每次都从头开始运行我的代码 并且这些保存的数据一目了然 现在 我转到设备上的 应用程序 部分中的设置 找到我的应用程序 然后触摸 清除数据 按钮以删除这些保存的
  • 匿名对象有什么优点?

    我有一个名为Sample在我的代码中使用如下 class Sample Object someMethod return someObject 我这样称呼它 Object ob new Sample someMethod 我想知道如果我创建
  • 为 LaTeX 编译清理字符串的函数?

    While xtable has a sanitize text function参数允许清理带有特殊字符的字符串 以阻止 LaTeX 编译破坏 Sweave knitr 文档 该包不会将该函数导出到用户空间 我怎样才能清理字符串asdf
  • 在 ggplot2 中使用闪避条形图绘制相对频率

    有人能回答我如何绘制条形图 将数字 x 变量映射到按 ggplot2 中的因子分组的相对频率吗 重要的是 相对频率应计算为分组的属于一个因素的 x 值内的频率 现在它们被计算为相对于totalx 值的数量 为了说明这一点 举一个例子 lib
  • 使用 Bcrypt 加密 InMemoryAuthentication 密码

    在对 UserDetailsS ervice 的自定义实现使用 Bcrypt 之前 我首先想看看是否可以在内存数据库中使用它 package com patrick Security import org springframework b