mirror of
https://github.com/ctripcorp/zeus.git
synced 2024-09-22 00:26:05 +08:00
hide stacktrace
This commit is contained in:
parent
724ed397a7
commit
07aa454cb5
|
@ -18,8 +18,8 @@ import javax.ws.rs.core.Response;
|
||||||
public class ErrorResponseHandler implements ResponseHandler {
|
public class ErrorResponseHandler implements ResponseHandler {
|
||||||
private static final MediaType defaultMediaType = MediaType.APPLICATION_JSON_TYPE;
|
private static final MediaType defaultMediaType = MediaType.APPLICATION_JSON_TYPE;
|
||||||
|
|
||||||
public Message generateMessage(Throwable object, String type) throws Exception {
|
public Message generateMessage(Throwable object, String type, boolean printStackTrace) throws Exception {
|
||||||
ErrorMessage em = ExceptionUtils.getErrorMessage(object);
|
ErrorMessage em = ExceptionUtils.getErrorMessage(object, printStackTrace);
|
||||||
ErrorResponse err = new ErrorResponse();
|
ErrorResponse err = new ErrorResponse();
|
||||||
|
|
||||||
if (type.equals(MediaType.APPLICATION_XML)) {
|
if (type.equals(MediaType.APPLICATION_XML)) {
|
||||||
|
@ -29,15 +29,15 @@ public class ErrorResponseHandler implements ResponseHandler {
|
||||||
}
|
}
|
||||||
if (object instanceof NotFoundException) {
|
if (object instanceof NotFoundException) {
|
||||||
err.setStatus(Response.Status.NOT_FOUND.getStatusCode());
|
err.setStatus(Response.Status.NOT_FOUND.getStatusCode());
|
||||||
}else if (object instanceof BadRequestException) {
|
} else if (object instanceof BadRequestException) {
|
||||||
err.setStatus(Response.Status.BAD_REQUEST.getStatusCode());
|
err.setStatus(Response.Status.BAD_REQUEST.getStatusCode());
|
||||||
}else if (object instanceof ValidationException) {
|
} else if (object instanceof ValidationException) {
|
||||||
err.setStatus(Response.Status.BAD_REQUEST.getStatusCode());
|
err.setStatus(Response.Status.BAD_REQUEST.getStatusCode());
|
||||||
}else if (object instanceof ForbiddenException) {
|
} else if (object instanceof ForbiddenException) {
|
||||||
err.setStatus(Response.Status.FORBIDDEN.getStatusCode());
|
err.setStatus(Response.Status.FORBIDDEN.getStatusCode());
|
||||||
}else if (object instanceof SlbValidatorException) {
|
} else if (object instanceof SlbValidatorException) {
|
||||||
err.setStatus(506);
|
err.setStatus(506);
|
||||||
}else if (object instanceof Exception) {
|
} else if (object instanceof Exception) {
|
||||||
err.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
|
err.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
|
||||||
}
|
}
|
||||||
return err;
|
return err;
|
||||||
|
@ -45,14 +45,17 @@ public class ErrorResponseHandler implements ResponseHandler {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Response handle(Object object, MediaType mediaType) throws Exception {
|
public Response handle(Object object, MediaType mediaType) throws Exception {
|
||||||
|
return handle(object, mediaType, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Response handle(Object object, MediaType mediaType, boolean printStackTrace) throws Exception {
|
||||||
if (object == null || !(object instanceof Throwable)) {
|
if (object == null || !(object instanceof Throwable)) {
|
||||||
throw new ValidationException("ErrorResponseHandler only accepts Throwable object");
|
throw new ValidationException("ErrorResponseHandler only accepts Throwable object");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mediaType == null || !MediaType.APPLICATION_XML_TYPE.equals(mediaType)) {
|
if (mediaType == null || !MediaType.APPLICATION_XML_TYPE.equals(mediaType)) {
|
||||||
mediaType = defaultMediaType;
|
mediaType = defaultMediaType;
|
||||||
}
|
}
|
||||||
Message message = generateMessage((Throwable) object, mediaType.toString());
|
Message message = generateMessage((Throwable) object, mediaType.toString(), printStackTrace);
|
||||||
return Response.status(message.getStatus()).entity(message.getResponse())
|
return Response.status(message.getStatus()).entity(message.getResponse())
|
||||||
.type(mediaType).build();
|
.type(mediaType).build();
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,7 @@ import java.lang.reflect.InvocationTargetException;
|
||||||
*/
|
*/
|
||||||
@Aspect
|
@Aspect
|
||||||
@Component
|
@Component
|
||||||
public class ExceptionAspect implements Ordered{
|
public class ExceptionAspect implements Ordered {
|
||||||
@Resource
|
@Resource
|
||||||
private ErrorResponseHandler errorResponseHandler;
|
private ErrorResponseHandler errorResponseHandler;
|
||||||
private Logger logger = LoggerFactory.getLogger(this.getClass());
|
private Logger logger = LoggerFactory.getLogger(this.getClass());
|
||||||
|
@ -43,17 +43,23 @@ public class ExceptionAspect implements Ordered{
|
||||||
logger.error(builder.toString());
|
logger.error(builder.toString());
|
||||||
|
|
||||||
MediaType mediaType = null;
|
MediaType mediaType = null;
|
||||||
|
boolean printStackTrace = false;
|
||||||
for (Object arg : point.getArgs()) {
|
for (Object arg : point.getArgs()) {
|
||||||
if (arg instanceof ContainerRequest) {
|
if (arg instanceof ContainerRequest) {
|
||||||
ContainerRequest cr = (ContainerRequest) arg;
|
ContainerRequest cr = (ContainerRequest) arg;
|
||||||
mediaType = cr.getMediaType();
|
mediaType = cr.getMediaType();
|
||||||
|
try {
|
||||||
|
printStackTrace = Boolean.parseBoolean(cr.getHeaderString("slb-stack-trace"));
|
||||||
|
} catch (Exception ex) {
|
||||||
|
printStackTrace = false;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (mediaType == null) {
|
if (mediaType == null) {
|
||||||
logger.warn("Request media type cannot be found - use json by default.");
|
logger.warn("Request media type cannot be found - use json by default.");
|
||||||
}
|
}
|
||||||
return errorResponseHandler.handle(cause, mediaType);
|
return errorResponseHandler.handle(cause, mediaType, printStackTrace);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.error("Error response handler doesn't work.");
|
logger.error("Error response handler doesn't work.");
|
||||||
return null;
|
return null;
|
||||||
|
|
|
@ -16,15 +16,15 @@ public class ExceptionUtils {
|
||||||
|
|
||||||
public static String getStackTrace(Throwable throwable) {
|
public static String getStackTrace(Throwable throwable) {
|
||||||
StringBuilder builder = new StringBuilder();
|
StringBuilder builder = new StringBuilder();
|
||||||
for(StackTraceElement ste : throwable.getStackTrace()) {
|
for (StackTraceElement ste : throwable.getStackTrace()) {
|
||||||
builder.append(ste.toString() + "\n");
|
builder.append(ste.toString() + "\n");
|
||||||
}
|
}
|
||||||
return builder.toString();
|
return builder.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ErrorMessage getErrorMessage(Throwable throwable) {
|
public static ErrorMessage getErrorMessage(Throwable throwable, boolean printStackTrace) {
|
||||||
return new ErrorMessage().setCode(ExceptionUtils.getErrorCode(throwable))
|
return new ErrorMessage().setCode(ExceptionUtils.getErrorCode(throwable))
|
||||||
.setMessage(ExceptionUtils.getMessage(throwable))
|
.setMessage(ExceptionUtils.getMessage(throwable))
|
||||||
.setStackTrace(ExceptionUtils.getStackTrace(throwable));
|
.setStackTrace(printStackTrace ? ExceptionUtils.getStackTrace(throwable) : null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue