Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 传递身份验证标头并将其添加到下一个请求_Java_Spring_Request_Postman - Fatal编程技术网

Java 传递身份验证标头并将其添加到下一个请求

Java 传递身份验证标头并将其添加到下一个请求,java,spring,request,postman,Java,Spring,Request,Postman,我有一个问题可能很简单,但我已经被困了一段时间了。我有一个程序,它接收请求,然后将它们转发到第三方应用程序的正确实例中 我不断地得到401/未经授权,有人告诉我,我需要做的就是让它工作“我将从客户端获得一个带有身份验证头的请求,我需要做的就是将该身份验证头添加到我的请求中,以摆脱401响应并获得200。我不明白如何在第一时间得到这个标题,或者将它添加到我的请求中 任何指针、链接或答案都将不胜感激。 多谢各位 @RestController @Slf4j @RequestMapping(Endpo

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

我不断地得到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) {
@RestController@Slf4j
@RequestMapping(Endpoints.PROVIDER.ROOT)
@预授权(@permissions.checkIfAdmin())
公共类管理员控制器{
@后期映射(Endpoints.ADMIN.ACTIONS)
公共响应实体操作(@RequestBody ActionRequest actionsRequest){

自动连线HttpServletRequest

@Autowired
    HttpServletRequest request;
并通过方法request.getHeader(“授权”)获取标头

注意-Authorization是我试图获取的头的名称

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

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;
        }
    }

取决于您是否正在使用任何框架或库,但可以通过以下方式从低级传入的HttpServletRequest访问客户端标头:
header authHeader=request.getHeader(HttpHeaders.AUTHORIZATION);
然后将
authHeader
添加到发送给第三方的请求中。谢谢。我使用spring框架,我的控制器类看起来像我在更新后的帖子中发布的代码。这可能有助于您直接使用该标题-将其添加为控制器参数:
@RequestHeader(HttpHeaders.AUTHENTICATION)字符串authHeader
(如果标头始终由客户端发送)。请查看以下内容: