gpt4 book ai didi

spring-boot - loadUserByUsername(String username)中的用户名参数为空-spring boot

转载 作者:行者123 更新时间:2023-12-04 02:32:12 26 4
gpt4 key购买 nike

这是我的UserDetailService :

public class StockUserDetailService implements UserDetailsService {
@Autowired
private UserRepository userRepository;
private static final Logger logger = Logger.getLogger(StockUserDetailService.class);
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
logger.debug("entering loadByUserName");
// MongoDatabase database = mongoClient.getDatabase("springsecurity");
User user = userRepository.findOne(username);
logger.debug("this is teh user ibzect ="+user);
if (user == null) {
logger.info("----------------------------------------------user name is "+username);
throw new UsernameNotFoundException("NAT FOUND");
}
return user;
}
}

但是 username参数总是以 null 的形式出现.我在 Stackoverflow 上看到很多其他有同样问题的帖子。他们中的一些人说这是因为它期望 usernamepassword作为 HTTP header 而不是 JSON 的一部分。

但我不认为这是真的,因为 Spring Boot 的默认登录页面只有一个简单的表单,它执行 POST请求 /login .这就是我正在做的事情。

我不明白这里的问题。

PS:我是通过 username配置的和 password正确的键名:

protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
.antMatchers("/signup**").permitAll()
.antMatchers("/login/**").permitAll()
.antMatchers("/logout/**").permitAll()
.and()
.authorizeRequests()
.antMatchers("/admin/**").hasAuthority("ADMIN")
.and()
.formLogin()
.usernameParameter("username").
.passwordParameter("password");
}

最佳答案

您发送usernamepassword参数为 JSON(内容类型 application/json ),但您必须发送 URL 编码参数(内容类型 application/x-www-form-urlencoded ),请参阅 Spring Security Reference :

4 The username must be present as the HTTP parameter named username

5 The password must be present as the HTTP parameter named password

关于spring-boot - loadUserByUsername(String username)中的用户名参数为空-spring boot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43978548/

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