Ash*_*win 1 login spring-security spring-boot
这是我的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;
}
}
Run Code Online (Sandbox Code Playgroud)
但是username争论总是这样来的null。我在Stackoverflow上看到大量其他帖子,都遇到了同样的问题。他们中的一些人说这是因为它期望username和password作为HTTP标头而不是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");
}
Run Code Online (Sandbox Code Playgroud)
您以JSON(内容类型)的形式发送username和password参数application/json,但是您必须发送URL编码的参数(内容类型application/x-www-form-urlencoded),请参阅Spring Security Reference:
4用户名必须作为名为username的HTTP参数存在
5密码必须作为名为password的HTTP参数存在
| 归档时间: |
|
| 查看次数: |
2703 次 |
| 最近记录: |