在进行身份验证时,authenticationManager.authenticate报错提示请求体缺失。解决办法是在请求头中设置Content-Type为application/json,并将请求参数以JSON字符串的形式放入请求体中。示例代码如下:
@RestController
@RequestMapping("/api")
public class AuthController {
@Autowired
private AuthenticationManager authenticationManager;
@Autowired
private JwtTokenUtil jwtTokenUtil;
@PostMapping("/login")
public ResponseEntity> createAuthenticationToken(@RequestBody LoginRequest loginRequest) throws Exception {
//身份验证
try {
authenticationManager.authenticate(
new UsernamePasswordAuthenticationToken(loginRequest.getUsername(), loginRequest.getPassword())
);
} catch (Exception e) {
throw new Exception("用户名或密码错误", e);
}
//生成Token
final UserDetails userDetails = userDetailsService.loadUserByUsername(loginRequest.getUsername());
final String token = jwtTokenUtil.generateToken(userDetails);
//返回Token
return ResponseEntity.ok(new JwtResponse(token));
}
}
当使用Postman等工具进行测试时,需要在请求头中添加Content-Type为application/json,同时请求体中传入JSON格式的参数,示例如下:
POST http://localhost:8080/api/login
Headers:
Content-Type: application/json
Body:
{
"username": "admin",
"password": "admin"
}
上一篇:authenticationManager.authenticate给我错误:需要请求体缺失
下一篇:AuthenticationManager.authenticates给我报了StackOverflowError。