场景
利用token防止表单重复提交,由于token使用一次就失效。如果表单提交失败(比如参数错误,service异常),接收表单的Controller就会抛出异常。项目中所有异常都一个GlobalExceptionHandler中处理:
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(value = {Throwable.class})
@ResponseStatus(value = HttpStatus.OK)
@ResponseBody
public ExceptionResponse handleCommonException(Throwable e, HttpServletResponse response) {
ExceptionResponse.create(String.valueOf(HttpStatus.INTERNAL_SERVER_ERROR.value()), "系统错误");
}
如果表单提交失败,controller抛出异常就会到这个方法中,我希望在这个方法中获取handler,利用handler上的注解来判断这个controller是不是需要token交验的,如果是的话就在这里重新生成token。。
现在的问题是,再这个方法中怎么知道是哪个handler抛出的异常?
这里我还真没想到怎么弄,可以考虑在Interceptor里面做,实现这个函数即可:
@Override
public void afterCompletion(
HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
}
((HandlerMethod) handler).getMethod()
就是controller里面的方法