【发布时间】:2017-10-14 04:23:23
【问题描述】:
这是我的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 上看到很多其他有同样问题的帖子。他们中的一些人说这是因为它期望 username 和 password 作为 HTTP 标头而不是 JSON 的一部分。
但我认为这不是真的,因为 Spring Boot 的默认登录页面只有一个简单的表单,它向 /login 发出 POST 请求。这就是我正在做的事情。
我不明白这里的问题。
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");
}
【问题讨论】:
-
我很久以前就知道了,但是除了通过 application/x-www-form-urlencoded 发送之外,您能分享一下解决方案吗
标签: spring-boot login spring-security