如何通过Swagger生成的Java类获取Authorization头值?
你可以通过以下几种方式在后端获取Authorization请求头:
方法1:使用@HeaderParam直接注入
在方法参数里添加@HeaderParam("Authorization")注解,直接获取整个Authorization头的值,之后再提取Bearer令牌部分:
@GET @Produces({"application/json"}) @ApiOperation( authorizations = {@Authorization("bearer_auth")}, tags = {"..."} ) @ApiResponses({@ApiResponse( code = 200, message = "...", response = Response.class )}) Response foo(@QueryParam("cursor") @ApiParam("cursor") String cursor, @HeaderParam("Authorization") String authorizationHeader) { // 提取Bearer令牌,格式通常是"Bearer <token>" if (authorizationHeader != null && authorizationHeader.startsWith("Bearer ")) { String token = authorizationHeader.substring(7); // 这里进行令牌验证逻辑 } // 其他业务逻辑 return Response.ok().build(); }
方法2:通过HttpServletRequest获取
如果你的后端基于JAX-RS,可以注入HttpServletRequest对象,从中获取请求头:
import javax.servlet.http.HttpServletRequest; import javax.ws.rs.core.Context; // ... @GET @Produces({"application/json"}) @ApiOperation( authorizations = {@Authorization("bearer_auth")}, tags = {"..."} ) @ApiResponses({@ApiResponse( code = 200, message = "...", response = Response.class )}) Response foo(@QueryParam("cursor") @ApiParam("cursor") String cursor, @Context HttpServletRequest request) { String authorizationHeader = request.getHeader("Authorization"); if (authorizationHeader != null && authorizationHeader.startsWith("Bearer ")) { String token = authorizationHeader.substring(7); // 令牌验证逻辑 } // 其他业务逻辑 return Response.ok().build(); }
方法3:使用JAX-RS的HttpHeaders上下文对象
注入HttpHeaders,通过它获取请求头:
import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.Context; // ... @GET @Produces({"application/json"}) @ApiOperation( authorizations = {@Authorization("bearer_auth")}, tags = {"..."} ) @ApiResponses({@ApiResponse( code = 200, message = "...", response = Response.class )}) Response foo(@QueryParam("cursor") @ApiParam("cursor") String cursor, @Context HttpHeaders headers) { String authorizationHeader = headers.getHeaderString(HttpHeaders.AUTHORIZATION); if (authorizationHeader != null && authorizationHeader.startsWith("Bearer ")) { String token = authorizationHeader.substring(7); // 令牌验证逻辑 } // 其他业务逻辑 return Response.ok().build(); }
注意:提取令牌时要做好空值和格式校验,避免出现NullPointerException或格式错误导致的异常。
内容的提问来源于stack exchange,提问作者Einiemand
相关产品推荐
相关产品推荐

