当我通过postman登录到我的API时,会生成一个JWT,使用这个JWT为特定用户创建数据,但是当我与这个用户及其JWT连接时,当我使用连接用户的JWT从Postman发出GET请求时,我得到一个400错误,说请求是坏的。我不明白为什么。我的Tomcat服务器端口不是8080而是7777...只是用GET方法在我的控制器下面:
@CrossOrigin(origins = "*")
@RestController
@RequestMapping("/weights")
public class WeightRecordController {
@Autowired
AppUserRepository appUserRepository;
@Autowired
PersonRepository personRepository;
private final Logger logger = LoggerFactory.getLogger(WeightRecordController.class);
public Long getAppUserConnectedId(Principal principal) {
if (!(principal instanceof UsernamePasswordAuthenticationToken)) {
throw new RuntimeException(("User not found"));
}
logger.info("USER IS PRESENT IN DATABASE FROM FUNCTION 'getAppUserConnectedId()'");
UsernamePasswordAuthenticationToken token = (UsernamePasswordAuthenticationToken) principal;
AppUser appUserFinded = appUserRepository.findByAppUsername(token.getName());
return appUserFinded.getIdUser();
}
@GetMapping("/all")
public ResponseEntity<List<WeightRecord>> getAllWeights(@RequestParam Principal principal) {
logger.info("GET /weights/all");
Long appUserConnectedId = this.getAppUserConnectedId(principal);
Person personToShow = personRepository.findById(appUserConnectedId).orElseThrow();
return new ResponseEntity<List<WeightRecord>>(personToShow.getWeightsList(), HttpStatus.OK);
}
}
2条答案
按热度按时间oknrviil1#
我不知道为什么Tomcat在端口8080上运行,而您在端口7777上调用API,但它返回代码400。这意味着您通过了应用程序的身份验证。您的get request @RequestParam主体,但它不显示在您的请求中
gj3fmq9x2#
事实上JWT令牌是通过请求的头来传输的,所以我只需要从我的端点中删除@RequestParam,它就可以工作了!下面是我的新代码: