[英]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.