gpt4 book ai didi

spring - spring boot : Encoded password does not look like BCrypt中的登录错误

转载 作者:行者123 更新时间:2023-12-03 22:15:31 24 4
gpt4 key购买 nike

我在idea中运行我的spring boot项目,注册,然后我登录时出现问题。它重定向到“localhost:8080/login?error”并在idea控制台中有以下内容

Encoded password does not look like BCrypt



我在 stackoverflow 中搜索了答案并看到了这个 the link 。但这对我来说似乎没用,因为我的配置扩展了 WebSecurityConfigurerAdapter 而不是 AuthorizationServerConfigurerAdapter。我的配置类是
    @Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Autowired
private WorkersRepository workersRepository;

@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/submit").access("hasRole('WORKER')")
.anyRequest().permitAll()
.and()
.formLogin()
.loginPage("/login")
.and()
.logout()
.logoutSuccessUrl("/")
.and()
.rememberMe()
.tokenValiditySeconds(4838400)
.key("workerKey");
}

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(new UserDetailsService() {
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
Worker worker = workersRepository.findByUsername(username);
return workersRepository.findByUsername(username);
}
}).passwordEncoder(new BCryptPasswordEncoder()).and()
.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder())
.withUser("admin").password("123456").roles("ADMIN","WORKER");
}
}

我的 worker 类是
@Entity
public class Worker implements UserDetails {

private static final long serialversionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

@NotNull
@Size(min = 5, max = 16, message = "{username.size}")
private String username;
@NotNull
@Size(min = 2, max = 30, message = "{firstName.size}")
private String firstname;
@NotNull
@Size(min = 2, max = 30, message = "{lastName.size")
private String lastname;
@NotNull
@Size(min = 5, max = 25,message = "{password.size}")
private String password;
@NotNull
@Size(min = 2, max = 30, message = "{profession,size}")
private String profession;

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getFirstname() {
return firstname;
}

public void setFirstname(String firstname) {
this.firstname = firstname;
}

public String getLastname() {
return lastname;
}

public void setLastname(String lastname) {
this.lastname = lastname;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public String getProfession() {
return profession;
}

public void setProfession(String profession) {
this.profession = profession;
}

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

//UserDetails methods


@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return Arrays.asList(new SimpleGrantedAuthority("WORKER"));
}

@Override
public boolean isAccountNonExpired() {
return true;
}

@Override
public boolean isAccountNonLocked() {
return true;
}

@Override
public boolean isCredentialsNonExpired() {
return true;
}

@Override
public boolean isEnabled() {
return true;
}
}

我的 WorkersRepository 是
package com.rieunity.workinghours;

import org.springframework.data.jpa.repository.JpaRepository;

public interface WorkersRepository extends JpaRepository<Worker, String> {
Worker findByUsername(String username);
}

我没有使用用户 admin 登录,我在 register.html 中注册了一个新用户并成功。然后我登录登录页面并因错误而失败:

Encoded password does not look like BCrypt



我错过了什么?

最佳答案

我已经解决了这个问题。由于我使用 BCryptPasswordEncoder 对密码进行了编码,因此我应该以这种形式存储密码。因此解决方案是添加

String encodedPassword = new BCryptPasswordEncoder().encode(worker.getPassword());
worker.setPassword(encodedPassword);

进入“/register”发布请求
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String registrationProcessing(@Valid Worker worker, Errors errors, RedirectAttributes model) {
if(errors.hasErrors()) {
return "registerForm";
};
String encodedPassword = new BCryptPasswordEncoder().encode(worker.getPassword());
worker.setPassword(encodedPassword);
workersRepository.save(worker);
model.addAttribute("username", worker.getUsername());
model.addFlashAttribute("worker", worker);
return "redirect:/";
}

关于spring - spring boot : Encoded password does not look like BCrypt中的登录错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51103378/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com