Имам следния проблем: Персонализирам класа AuthenticationProvider, осигурен от пролетното зареждане, за да извика услуга за почивка, за да направя влизането на отдалечен сървър.
Ако идентификационните данни са правилни, няма проблем.
Проблемът възниква, когато идентификационните данни са неправилни и http статусът на отговора на сървъра е 403. На практика не мога да получа отговора, защото автоматично се повдига изключение от API rest:
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();
Благодаря предварително.