gpt4 book ai didi

java - 如何在 Spring 类 AuthenticationProvider 中拦截 403 http 状态时来自 REST API 的响应

转载 作者:行者123 更新时间:2023-12-01 06:07:52 25 4
gpt4 key购买 nike

我遇到以下问题:我自定义 Spring Boot 提供的 AuthenticationProvider 类来调用休息服务,以便在远程服务器上登录。

如果凭据正确,则没有问题。

当凭据不正确且服务器响应 http 状态为 403 时,就会出现问题。在实践中,我无法得到响应,因为它会自动引发 API 休息的异常:

ResponseEntity <UserResponse> resp = restTemplate.exchange (url, HttpMethod.POST, requestEntity, UserResponse.class);

我尝试创建自定义类,以捕获异常@ControllerAdvice注解,但是无法调用,因为异常不是在 Controller 中出现,而是在AuthenticationProvider类中出现。

有没有办法拦截 REST API 异常的响应?

public class CustomAuthenticationProvider implements AuthenticationProvider {

private static final Logger log = LoggerFactory.getLogger(CustomAuthenticationProvider.class);

@Value("${search.login}")
private String searchLogin;

@Autowired
private HttpServletRequest request;

private DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");

@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
User user=new User();
ObjectWriter ow = new ObjectMapper().writer();
String json="log-> ";
UserResponse response=new UserResponse();
try {

RestTemplate restTemplate = new RestTemplate();
URI url;
url = new URI(searchLogin);
MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>();
map.add("username",URLEncoder.encode(authentication.getName(), "utf-8"));
map.add("password",URLEncoder.encode(authentication.getCredentials().toString(), "utf-8"));
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
List<MediaType> acceptableMediaTypes=new ArrayList<MediaType>();
acceptableMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
requestHeaders.setAccept(acceptableMediaTypes);
HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<MultiValueMap<String, String>>(map,requestHeaders);
ResponseEntity<UserResponse> resp = restTemplate.exchange(url, HttpMethod.POST, requestEntity, UserResponse.class);
response = resp.getBody();

提前致谢。

最佳答案

恐怕您将不得不从 Spring Security 处理它,因为 @ControllerAdvice 只拦截直接从 Controller 抛出的异常。我认为this link将为您提供您正在寻找的解决方案。

关于java - 如何在 Spring 类 AuthenticationProvider 中拦截 403 http 状态时来自 REST API 的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40869139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com