我有以下问题:我自定义的AuthenticationProvider类,弹簧启动提供,调用REST服务,以使登录在远程服务器上。如何拦截来自REST API中的403个HTTP状态情况下的响应,在Spring类的AuthenticationProvider
如果凭据是正确的,没问题。
问题出现时的凭据是不正确的,服务器响应HTTP状态是403 在实践中,我无法获得响应,因为它会自动升起API其余的异常:
ResponseEntity <UserResponse> resp = restTemplate.exchange (url, HttpMethod.POST, requestEntity, UserResponse.class);
我试图创建自定义类,以通过 @ControllerAdvice注释捕获异常,但它不能被调用,因为该异常不是在控制器中出现,而是出现在AuthenticationProvider类中。
有没有办法拦截休息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();
在此先感谢。
什么是你想要做* *?你说你不能“得到回应” - 在哪里?出于什么目的?看起来你正在得到一个正确的答案(403) - 特别是,你想与众不同吗? – chrylis
是的,我得到正确的403,但我想阅读回复并在日志中打印。但是,在春天的框架之前出现以及处理的异常,不能阅读回答。 – Maforast
当你得到403,那么你可以确定发生异常并打印它来记录。是吗 ?或者你可以尝试捕获异常并再次抛出,与@ExcepionHandler结合,也许它可以工作。 –