通过Filter进行拦截后,如果拦截不放行,由于doFilter 方法返回的是void,则客户端request请求返回无任何数据,如果想自定义返回数据则需要单独处理(注意:在doFilter中采取直接throw new Exception方式无效)
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
if(!file.isFile()){
this.sendResponse(servletResponse,ApiError.SYSTEM_INACTIVE_ERROR);
return ;
}
filterChain.doFilter(servletRequest, servletResponse);
}
/**
* 自定义返回数据
*/
private void sendResponse(ServletResponse servletResponse,ApiError apiError){
HttpServletResponse response = (HttpServletResponse) servletResponse;
response.setStatus(HttpStatus.OK.value());
response.setCharacterEncoding("utf-8");
response.setContentType("application/json; charset=utf-8");
try (PrintWriter out = response.getWriter()) {
ResponseVO tandemResponse = ResponseVO.failed(apiError);
String json = SpringContextUtil.getBean("jacksonObjectMapper", ObjectMapper.class).writeValueAsString(tandemResponse);
out.print(json);
} catch (IOException e) {
log.error("sendResponse error:", e);
}
}