Spring boot 的内存用户验证-无响应解决方法

Spring boot 2.0.1引用的security 依赖是 spring security 5.X版本,此版本需要提供一个PasswordEncorder的实例,否则后台汇报错误:
java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id "null"
并且页面毫无响应。
因此,需要创建PasswordEncorder的实现类。

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

public class MyPasswordEncoder implements PasswordEncoder {

    @Override
    public String encode(CharSequence charSequence) {
        return charSequence.toString();
    }

    @Override
    public boolean matches(CharSequence charSequence, String s) {
        return s.equals(charSequence.toString());
    }
}

此类使用了最简单的明文密码作为测试。

在内存用户验证里添加

 protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication().passwordEncoder(new MyPasswordEncoder())
                .withUser("admin").password("123456").roles("ADMIN","USER").and()
                .withUser("user").password("111").roles("USER");
    }

.passwordEncoder(new MyPasswordEncoder())
这样,页面提交时候,密码以明文的方式进行匹配。

方式二:
使用Spring Security自带的PasswordEncoder的实现,比如:BCryptPasswordEncoder。
BCryptPasswordEncoder采用SHA-256 +随机盐+密钥对密码进行加密。
PasswordEncoder的实现类:


PasswordEncoder实现类.png

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 103,703评论 13 125
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 37,110评论 5 339
  • 前言 本章内容: ▪️Spring Security介绍 ▪️使用Servlet规范中的Filter保护Web应用...
    Chandler_珏瑜阅读 5,362评论 0 68
  • 要加“m”说明是MB,否则就是KB了. -Xms:初始值 -Xmx:最大值 -Xmn:最小值 java -Xms8...
    dadong0505阅读 3,497评论 0 52
  • 同时 从一个不爱做梦的人成为了一个爱做梦的人 从一个爱做梦的人成为了一个不爱做梦的人 那是...... 但唯有一些...
    浪客鱼阅读 44评论 0 0