webBG - програмисти, машинно обучение, javascript, python, php, питам, говорим, публикации

Как да прихвана отговора от REST API в случай на 403 http статус, в Spring клас AuthenticationProvider

Имам следния проблем: Персонализирам класа 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();

Благодаря предварително.

29.11.2016

  • Какво се опитваш да направиш? Казвате, че не можете да получите отговор - къде? С каква цел? Изглежда, че получавате правилен (403) отговор съвсем добре - какво по-конкретно искате да сте различни? 29.11.2016
  • Да, получавам правилно 403, но бих искал да прочета отговора и да го отпечатам в журнала. Но изключение възниква преди и се обработва от spring framework и не мога да прочета отговор. 29.11.2016
  • когато получите 403, можете да определите дали изключението се е случило и да го отпечатате в журнала. Така ли ? или можете да опитате да хванете изключението и да го хвърлите отново, комбинирате с @ExcepionHandler, може би ще работи. 29.11.2016
  • Имам нужда от json отговор, прикачен към състояние 403, а не само към съобщение за разширение. 29.11.2016

Отговори:


1

Страхувам се, че ще трябва да се справите с него от Spring Security, тъй като @ControllerAdvice прихваща само изключения, хвърлени директно от вашия контролер. Мисля, че тази връзка ще ви даде решението, което търсите.

29.11.2016
  • Да, това трябва да е правилен отговор, ако беше извикана услуга за почивка от контролер, но аз съм в класа AuthenticationProvider, преди да бъде извикан който и да е контролер 29.11.2016

  • 2

    можете да опитате да добавите @ExceptionHandler във вашия Rest. точно като напр. @ExceptionHandler public String exp(HttpServletRequest request, Exception ex) {
    //balabala }

    29.11.2016
  • Това няма да работи, тъй като ControllerAdvice / ExceptionHandler работят само с изключения, хвърлени директно от контролера 29.11.2016
  • Нови материали

    Как да предотвратите влизането на някой от вашата кодова база
    // TLDR TypeScript добавя статично въвеждане към JavaScript, улавяйки грешки като препращане към променливи извън обхвата или извикване на функции с грешни аргументи. Той е несъвършен и има..

    Анализ на настроението с помощта на логистична регресия и наивен Бейс
    Нека сравним кой алгоритъм е по-добър за класифициране на туитовете въз основа на техните чувства. Наблюдаван ML При контролираното машинно обучение обикновено имате вход X, който влиза във..

    Нови тенденции в AI и спорта
    Изкуственият интелект е авангардна технология, която дава възможност на машините да изпълняват задачи, които обикновено изискват човешки интелект, като вземане на решения, разпознаване на реч и..

    Графични теоретични алгоритми
    Автори:- Yash Gaherwar , Tanishq Deshpande , Devanshu Dalal , Avinash Dhakne В тази статия ще обсъдим една от най-важните теми на „ Анализ на дизайна на алгоритми“ , т.е. Графика . Ще..

    Samsung и услугата Polyfill
    Като разработчик харесвам услугата polyfill. Използвайки го, поправих стари проблеми със съвместимостта на IE, като добавих един маркер за скрипт. Полифилът е скрипт, внедряващ функция от..

    Оцветяване на графика Sudoku с Neo4j
    Бях щастлив да видя, че скорошна версия на графичните алгоритми Neo4j съдържа алгоритъма за оцветяване K-1 . Този алгоритъм се опитва да присвои цветове на възлите на графика по такъв начин, че..

    Как преподавате физика на модели за машинно обучение?
    Хибридни анализи: Комбиниране на най-доброто от два свята В другите си публикации съм обхванал теми като: Машинно обучение за откриване на аномалии и мониторинг на състоянието , как..