繁体   English   中英

Spring Rest Controller 在执行前处理方法后没有被调用

[英]Spring Rest Controller not getting called after Pre Handle Method executed

我在 spring 启动应用程序中添加了一个拦截器,我正在其中进行某种验证。

在这里,我面临的问题是,即使在验证成功并且从 PreHandle 方法返回 true 之后,我的 controller 方法也没有被调用。

 @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;

}

下面是 controller 代码:

@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());
}

任何人都可以通过指出我做错了什么来帮助我。 为什么我的 controller 方法即使在返回 true 后也没有被调用。

谢谢,

由于您覆盖了 preHandle 方法,要将请求传递给 controller 您必须调用 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);

 }

}

希望这能解决您的问题:)

我的错。 代码都是正确的。 问题在于请求。 Json 请求作为文本传递。 它给出了 415 错误。这就是它在尝试调用 controller 时失败的原因。

感谢所有提供宝贵意见的人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM