【问题标题】:Pass authentication header and add it to next request通过身份验证标头并将其添加到下一个请求
【发布时间】:2020-12-18 06:06:35
【问题描述】:

我有一个可能非常简单的问题,但我已经坚持了一段时间了。我有一个程序接收请求,然后在第三方应用程序的正确实例中转发它们。

我不断收到 401/未经授权,我被告知要使其正常工作,我需要做的就是“我将收到来自客户端的带有身份验证标头的请求,并且我需要做的就是摆脱401 响应和获取 200 是将该身份验证标头添加到我的请求中。我不明白如何首先获取此标头,或者将其添加到我的请求中。

任何指针、链接或答案将不胜感激。 谢谢

@RestController @Slf4j
@RequestMapping(Endpoints.PROVIDER.ROOT)
@PreAuthorize("@permissions.checkIfAdmin()")
public class AdminController {

@PostMapping(Endpoints.ADMIN.ACTIONS)
public ResponseEntity<ActionResponse> actions(@RequestBody ActionRequest actionsRequest) {

【问题讨论】:

  • 取决于您是否使用任何框架或库,但可以通过以下方式从低级传入 HttpServletRequest 访问客户端标头:Header authHeader = request.getHeader(HttpHeaders.AUTHORIZATION); 然后将authHeader添加到第三个传出请求派对。
  • 谢谢。我使用 spring 框架,我的控制器类看起来像我在更新后发布的代码
  • 标头是直接可用的 - 添加这个作为控制器参数:@RequestHeader(HttpHeaders.AUTHENTICATION) String authHeader(如果标头将始终由客户端发送)。

标签: java spring request postman


【解决方案1】:

自动装配 HttpServletRequest

@Autowired
    HttpServletRequest request;

并通过request.getHeader("Authorization")方法获取header

注意 - 授权是我要获取的标头的名称。

以下是类似问题的示例。我正在从当前请求中读取授权标头并将其作为标头参数传递给另一个请求

public class UserDetailsService 
{
    @Autowired
    WebClient.Builder webClientBuilder;
    
    @Autowired
    HttpServletRequest request;
    
    @Value("${common.serverurl}")
    private String reqUrl;
    
    Logger log = LoggerFactory.getLogger(UserDetailsService.class);
    
    public UserReturnData getCurrentUser()
    {
        log.info("Making API Call to fetch current user");
        try
        {
            UserReturnData userDetails = webClientBuilder.build()
                            .get()
                            .uri(reqUrl+"user/me")
                            .header("Authorization", request.getHeader("Authorization"))
                            .retrieve()
                            .bodyToMono(UserReturnData.class)
                            .block();
            return userDetails;
        }
        catch(Exception e)
        {
            log.info("Error API Call to fetch current user " + e);
            return null;
        }
    }

【讨论】:

    猜你喜欢
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 2021-11-20
    • 2014-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多