英文:
Pass authentication header and add it to next request
问题
我有一个问题,可能非常简单,但我已经卡在这里一段时间了。我有一个程序用于接收请求,然后将这些请求转发到第三方应用程序的正确实例。
我一直在收到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) {
英文:
I have a question that might be really simple but I have been stuck at it for a while now. I have a program that receives requests and then forwards them in the correct instance of an third party application.
I keep on getting 401/Unauthorized and I have been told that all I need to do to make it work is that "I will get a request from the client with an authentication header and that all I need to do to get rid of the 401 response and get 200 is to add that authentication header to my request. I dont understand how I can get this header in the first place, or add it to my request.
Any pointer, link, or answer would be greatly appreciated.
Thank you
@RestController @Slf4j
@RequestMapping(Endpoints.PROVIDER.ROOT)
@PreAuthorize("@permissions.checkIfAdmin()")
public class AdminController {
@PostMapping(Endpoints.ADMIN.ACTIONS)
public ResponseEntity<ActionResponse> actions(@RequestBody ActionRequest actionsRequest) {
答案1
得分: 2
自动装配 HttpServletRequest
@Autowired
HttpServletRequest request;
通过方法 request.getHeader("Authorization")
获取头信息
注意 - 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;
}
}
}
英文:
Autowire HttpServletRequest
@Autowired
HttpServletRequest request;
And fetch header through method request.getHeader("Authorization")
Note - Authorization is the name of the header I am trying to fetch.
Below is an example of similar issue. I am reading authorization header from my current request and passing it as header parameter to another request
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;
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论