首页 > 解决方案 > BCrypt rawPassword 不能为空 Spring

问题描述

我有以下问题:

出现意外错误(类型=内部服务器错误,状态=500)。rawPassword 不能为空 java.lang.IllegalArgumentException: rawPassword 不能为空

这是我的 SecurityConfig 类

package my.taco.web;

import org.springframework.beans.factory.annotation.Autowired;
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 {

    @Autowired
    private UserDetailsService userDetailsService;

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

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception{
        auth
                .userDetailsService(userDetailsService)
                .passwordEncoder(encoder());
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception{
        http
                .authorizeRequests()
                .antMatchers("/design","/orders").access("hasRole('ROLE_USER')")
                .antMatchers("/","/**").access("permitAll")
                .and()
                .formLogin()
                .loginPage("/login")
                .defaultSuccessUrl("/design",true)
                .and()
                .logout()
                .logoutSuccessUrl("/");


    }

}

当我使用密码编码器时也编码

public User toUser(PasswordEncoder passwordEncoder){
        return new User(
                username,passwordEncoder.encode(password),
                fullname,street,city,state,zip,phone);
    }


@PostMapping
    public String processRegistration(RegistrationForm form){
        userRepo.save(form.toUser(passwordEncoder));
        return "redirect:/login";
    }

标签: javaspringauthenticationpasswordsbcrypt

解决方案


实际上,我也遇到了同样的问题,并且尝试了很多问题。在RegistrationForm.java文件中,我声明了两个构造函数,一个带有 args,另一个没有 arg。当我删除无参数构造函数时,表单的字段不为空。


推荐阅读