Spring Rest Controller не вызывается после выполнения метода Pre Handle - PullRequest
1 голос
/ 04 апреля 2020

Я добавил перехватчик в приложении весенней загрузки, в котором я выполняю какую-то проверку.

Здесь я сталкиваюсь с проблемой, что даже после того, как проверка прошла успешно, и из метода PreHandle, моего контроллера, возвращается true метод не вызывается.

 @Configuration
    public class InterceptorConfig implements WebMvcConfigurer {

    @Autowired
    AuthInterceptor authInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(authInterceptor);
    }
   }

Метод preHandle перехватчика выглядит следующим образом:

@Override

public boolean preHandle(HttpServletRequest request,

                         HttpServletResponse response, Object object) throws Exception {

    String oAuthToken = request.getHeader("access_token");

    if(StringUtils.isEmpty(oAuthToken)) {

       throw new UnauthorizedUserException();

    }

    Header header = new BasicHeader("cookie","access_token="+oAuthToken);

    HttpResponse httpResponse = Utils.sendGetRequest(oAuthValidationUrl,header);

    if(httpResponse.getStatusLine().getStatusCode()!= HttpStatus.SC_OK){

        throw new UnauthorizedUserException();

    }

    return true;

}

Ниже приведен код контроллера:

@PostMapping("/generateForm")public ResponseEntity<?> generateForm(@Valid @RequestBody Form form) throws BaseException {

logger.debug("______Inside Controller______");

ByteArrayOutputStream output = null;

ResponseDto resp = validateRequest(form15GHReq);

if (resp.getResponseCode().equals("ERROR")) {
 return ResponseEntity.status(HttpStatus.BAD_REQUEST).contentType(MediaType.APPLICATION_JSON).body(resp);
  }

 try {
  output =      formService.genereateForm15GHPDFByteArray(form15GHReq);
 } catch (Exception e) {
  logger.error("EXception occure:{}", e.getMessage());
  resp = new ResponseDto();
  resp.setResponseCode("ERROR");
 resp.setResponseMsg(e.getMessage());
 return  ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).contentType(MediaType.APPLICATION_JSON).body(resp);
 } 
 logger.debug("_______Exit    Controller______");
  return  ResponseEntity.status(HttpStatus.OK).contentType(MediaType.APPLICATION_PDF).body(output.toByteArray());
}

Кто-нибудь может помочь, пожалуйста меня, указав, что я делаю неправильно. Почему мой метод контроллера не вызывается даже после возврата true.

Спасибо,

Ответы [ 2 ]

0 голосов
/ 05 апреля 2020

Мой Плохой. Код был все правильно. Вопрос был с просьбой. Json запрос был передан как текст. Он выдавал ошибку 415. Это было причиной его сбоя при попытке вызвать контроллер.

Спасибо всем, кто предоставил ценный вклад.

0 голосов
/ 04 апреля 2020

Поскольку вы переопределяете метод preHandle, чтобы передать запрос контроллеру, вы должны вызвать супер реализацию метода preHandle, как показано ниже,

 @Configuration
 public class WebMvcConfig extends WebMvcConfigurationSupport {

 @Autowired
 CustomInterceptor customInterceptor;

 @Override
 public void addInterceptors(InterceptorRegistry registry) {

     registry.addInterceptor(customInterceptor);

 }
}

@Component
public class CustomInterceptor extends HandlerInterceptorAdapter{

 @Override
  public boolean preHandle(HttpServletRequest request,
  HttpServletResponse response, Object object) throws Exception {

  String oAuthToken = request.getHeader("access_token");

   if(StringUtils.isEmpty(oAuthToken)) {

      throw new UnauthorizedUserException();

   }

    Header header = new BasicHeader("cookie","access_token="+oAuthToken);

   HttpResponse httpResponse = 
Utils.sendGetRequest(oAuthValidationUrl,header);

  if(httpResponse.getStatusLine().getStatusCode()!= HttpStatus.SC_OK){

      throw new UnauthorizedUserException();

 }

  return super.preHandle(request, response, object);

 }

}

Надеюсь, это решит вашу проблему:)

...