首页 > 解决方案 > 缺少调用 RestAPI 方法的请求标头“authToken”

问题描述

我有这个 RestAPI 方法

@GetMapping(path = "/menus",
                consumes = "application/json", 
                produces = "application/json")
    public ResponseEntity<List<MenuPriceSummary>> allMenus(HttpServletRequest request,  @RequestHeader(value="Authorization: Bearer") String authToken) {

        String username = jwtTokenUtil.getUsernameFromToken(authToken);
        User user = userService.findByUserName(username);
        return ResponseEntity.ok(menuService.allMenus(user));

    }

我从 curl 中调用

curl -X GET -H "Content-Type: application/json" -H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJsb3Blei5hbnRvbmlvODVAZ21haWwuY29tIiwiZXhwIjoxNTk0MTkzNDYwLCJpYXQiOjE1MzM3MsM0NjB9.9pXvdiRMM5fjE4Ur5nqKvwvRLmNWyn6tY6y5fPXOg_BWEW2sJ8vnrLTXPfiA-Sc6Qk2XTwi6FhlIhFEQKip4aQ"  "http://127.0.0.1:1133/canPeris/api/v1/users/menus"

但我得到了这个错误:

   "status":400,"error":"Bad Request","message":"Missing request header 'Authorization: Bearer' for method parameter of type String"'authToken' for method parameter of type String","tr....

标签: restspring-bootresttemplaterestful-authentication

解决方案


你不能用@RequestHeader那种方式。标头中的值被拆分:并添加到 Map 中,因此每个包含 a 的值:都是不可能的。

您必须将注释更改为@RequestHeader(value="Authorization"),然后BearerauthToken.


推荐阅读