class AbstractInterceptor<T extends Annotation> implements Interceptor {

    @Override
    public Object doIntercept(Invocation inv) throws Throwable {<FILL_FUNCTION_BODY>}


    public abstract Class<T> type();

    public abstract Result verify(T anno) throws Exception;
}

        T anno = inv.getMethodAnnotation(type());

        if (anno == null) {
            anno = inv.getTargetAnnotation(type());
        }

        if (anno != null) {
            Result rst = verify(anno);

            if (rst.getCode() != Result.SUCCEED_CODE) {
                Context ctx = Context.current();

                if (ctx != null) {
                    ctx.setHandled(true);
                    ctx.setRendered(true);
                    AuthUtil.adapter().failure().onFailure(ctx, rst);
                    throw new DataThrowable();
                } else {
                    throw new AuthException((AuthStatus) rst.getData(), rst.getDescription());
                }
            }
        }

        return inv.invoke();
    
<no_super_class>