簡體   English   中英

Java APIRest - 使用 GET 方法和 JWT 的 Postman 錯誤 400 錯誤請求

[英]Java APIRest - Postman error 400 bad request with GET method and JWT

在此處輸入圖像描述

當我通過郵遞員登錄我的 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);
            }
    }

我不知道為什么Tomcat在8080端口上運行,而你在7777端口調用API,但它返回代碼400。這意味着你通過了應用程序的身份驗證。 您的獲取請求 @RequestParam 主體,但它沒有出現在您的請求中

實際上,JWT 令牌是由請求的標頭傳輸的,所以我只需從端點中刪除 @RequestParam 就可以了! 只需下面我為相關端點的新代碼:

@GetMapping("/all")
public ResponseEntity<List<WeightRecord>> getAllWeights(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);
}

如果您在 tomcat 上使用端口 8080,為什么在 Postman 上使用端口 7777 ?

此外,嘗試在您的 Spring Boot 配置logging.level.org.springframework.web=DEBUG中添加以下屬性,您將獲得在控制台日志上收到 400 Bad requests 的確切原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM