Example usage for org.aspectj.lang ProceedingJoinPoint getSignature

List of usage examples for org.aspectj.lang ProceedingJoinPoint getSignature

Introduction

In this page you can find the example usage for org.aspectj.lang ProceedingJoinPoint getSignature.

Prototype

Signature getSignature();

Source Link

Document

getStaticPart().getSignature() returns the same object

Usage

From source file:com.invariantproperties.project.student.webservice.server.rest.UnexpectedResourceExceptionHandler.java

License:Apache License

/**
 * Find method called via reflection./*from  ww  w  . j  a  v a  2  s .c o  m*/
 * 
 * @param pjp
 * @return
 */
Method findMethod(ProceedingJoinPoint pjp) {
    Class<?>[] argtypes = new Class[pjp.getArgs().length];
    for (int i = 0; i < argtypes.length; i++) {
        argtypes[i] = pjp.getArgs()[i].getClass();
    }

    Method method = null;

    try {
        // @SuppressWarnings("unchecked")
        method = pjp.getSignature().getDeclaringType().getMethod(pjp.getSignature().getName(), argtypes);
    } catch (Exception e) {
        Logger.getLogger(UnexpectedResourceExceptionHandler.class)
                .info(String.format("could not find method for %s.%s",
                        pjp.getSignature().getDeclaringType().getName(), pjp.getSignature().getName()));
    }

    return method;
}

From source file:com.invariantproperties.sandbox.student.webservice.security.RestParameterChecker.java

License:Apache License

/**
 * Check that the UUID is well-formed in CRUD REST service calls.
 * //  ww w . j a  v  a 2 s . co  m
 * @param pjp
 * @param uuid
 * @return
 * @throws Throwable
 */
@Around("target(com.invariantproperties.sandbox.student.webservice.server.rest.AbstractResource) && args(uuid,..) && (execution(* *.create*(..)) || execution(* *.delete*(..)) || execution(* *.update*(..)) || execution(* *.get*(..)))")
public Object checkUuid(ProceedingJoinPoint pjp, String uuid) throws Throwable {
    final Object[] args = pjp.getArgs();
    Object results = null;

    if (LOG.isDebugEnabled()) {
        LOG.debug(String.format("checking for bad UUID: %s(%s)...", pjp.getSignature().getName(), uuid));
    }

    if (!StudentUtil.isPossibleUuid(uuid)) {
        results = Response.status(Status.BAD_REQUEST).build();
        LOG.info(pjp.getSignature().getName() + ": attempt to use malformed UUID");
    } else {
        results = pjp.proceed(args);
    }

    return results;
}

From source file:com.invariantproperties.sandbox.student.webservice.server.rest.CheckPostValues.java

License:Apache License

/**
 * Check post values on create method.//  w  w  w.  j a  va2s. com
 * 
 * @param pjp
 * @return
 * @throws Throwable
 */
@Around("target(com.invariantproperties.sandbox.student.webservice.server.rest.AbstractResource) && args(rto,..)")
public Object checkParametersCreate(ProceedingJoinPoint pjp, Validatable rto) throws Throwable {
    final Logger log = Logger.getLogger(pjp.getSignature().getDeclaringType());
    final String name = pjp.getSignature().getName();
    Object results = null;

    if (rto.validate()) {
        // this should be safe since parameters have been validated.
        if (log.isDebugEnabled()) {
            log.debug(String.format("%s(%s): entry", name, Arrays.toString(pjp.getArgs())));
        }
        results = pjp.proceed(pjp.getArgs());
    } else {
        // FIXME: this is unsafe
        if (log.isInfoEnabled()) {
            log.info(String.format("%s(%s): bad arguments", name, Arrays.toString(pjp.getArgs())));
        }
        // TODO: tell caller what the problems were
        results = Response.status(Status.BAD_REQUEST).build();
    }

    return results;
}

From source file:com.invariantproperties.sandbox.student.webservice.server.rest.CheckPostValues.java

License:Apache License

/**
 * Check post values on update method./*w w w .j a va 2 s . c  o  m*/
 * 
 * @param pjp
 * @return
 * @throws Throwable
 */
@Around("target(com.invariantproperties.sandbox.student.webservice.server.rest.AbstractResource) && args(uuid,rto,..)")
public Object checkParametersUpdate(ProceedingJoinPoint pjp, String uuid, Validatable rto) throws Throwable {
    final Logger log = Logger.getLogger(pjp.getSignature().getDeclaringType());
    final String name = pjp.getSignature().getName();
    Object results = null;

    if (!StudentUtil.isPossibleUuid(uuid)) {
        // this is a possible attack.
        if (log.isInfoEnabled()) {
            log.info(String.format("%s(): uuid", name));
        }
        results = Response.status(Status.BAD_REQUEST).build();
    } else if (rto.validate()) {
        // this should be safe since parameters have been validated.
        if (log.isDebugEnabled()) {
            log.debug(String.format("%s(%s): entry", name, Arrays.toString(pjp.getArgs())));
        }
        results = pjp.proceed(pjp.getArgs());
    } else {
        // FIXME: this is unsafe
        if (log.isInfoEnabled()) {
            log.info(String.format("%s(%s): bad arguments", name, Arrays.toString(pjp.getArgs())));
        }
        // TODO: tell caller what the problems were
        results = Response.status(Status.BAD_REQUEST).build();
    }

    return results;
}

From source file:com.invariantproperties.sandbox.student.webservice.server.rest.CheckPostValues.java

License:Apache License

/**
 * Check post values on delete method. This is actually a no-op but it
 * allows us to log method entry./*from   w  w  w .j  av  a  2 s . c om*/
 * 
 * @param pjp
 * @return
 * @throws Throwable
 */
@Around("target(com.invariantproperties.sandbox.student.webservice.server.rest.AbstractResource) && args(uuid,version) && execution(* *.delete*(..))")
public Object checkParametersDelete(ProceedingJoinPoint pjp, String uuid, Integer version) throws Throwable {
    final Logger log = Logger.getLogger(pjp.getSignature().getDeclaringType());
    final String name = pjp.getSignature().getName();
    Object results = null;

    if (!StudentUtil.isPossibleUuid(uuid)) {
        // this is a possible attack.
        if (log.isInfoEnabled()) {
            log.info(String.format("%s(): uuid", name));
        }
        results = Response.status(Status.BAD_REQUEST).build();
    } else {
        // this should be safe since parameters have been validated.
        if (log.isDebugEnabled()) {
            log.debug(String.format("%s(%s): entry", name, Arrays.toString(pjp.getArgs())));
        }
        results = pjp.proceed(pjp.getArgs());
    }

    return results;
}

From source file:com.invariantproperties.sandbox.student.webservice.server.rest.CheckPostValues.java

License:Apache License

/**
 * Check post values on find methods. This is actually a no-op but it allows
 * us to log method entry.//w w  w.  ja v a 2  s.  c  o  m
 * 
 * @param pjp
 * @return
 * @throws Throwable
 */
@Around("target(com.invariantproperties.sandbox.student.webservice.server.rest.AbstractResource) && execution(* *.find*(..))")
public Object checkParametersFind(ProceedingJoinPoint pjp) throws Throwable {
    final Logger log = Logger.getLogger(pjp.getSignature().getDeclaringType());

    if (log.isDebugEnabled()) {
        log.debug(String.format("%s(%s): entry", pjp.getSignature().getName(), Arrays.toString(pjp.getArgs())));
    }
    final Object results = pjp.proceed(pjp.getArgs());

    return results;
}

From source file:com.invariantproperties.sandbox.student.webservice.server.rest.UnexpectedResourceExceptionHandler.java

License:Apache License

/**
 * Check for an unhandled exception from a REST resource. If we catch one
 * AND the method returns a Response we can return a Server Internal Error
 * (500) error code instead of blowing up. We need to check though since
 * some methods don't return a Response.
 * //from w  w w .j  av  a  2 s .  co m
 * @param pjp
 * @return
 * @throws Throwable
 */
@Around("target(com.invariantproperties.sandbox.student.webservice.server.rest.AbstractResource)")
public Object checkForUnhandledException(ProceedingJoinPoint pjp) throws Throwable {
    Object results = null;
    Logger log = Logger.getLogger(pjp.getSignature().getClass());

    try {
        results = pjp.proceed(pjp.getArgs());
    } catch (ObjectNotFoundException e) {
        // this is safe to log since we know that we've passed filtering.
        String args = Arrays.toString(pjp.getArgs());
        results = Response.status(Status.NOT_FOUND).entity("object not found: " + args).build();
        if (log.isDebugEnabled()) {
            log.debug("object not found: " + args);
        }
    } catch (Exception e) {
        // find the method we called. We can't cache this since the method
        // may be overloaded
        Method method = findMethod(pjp);
        if ((method != null) && Response.class.isAssignableFrom(method.getReturnType())) {
            // if the method returns a response we can return a 500 message.
            if (!(e instanceof UnitTestException)) {
                if (log.isInfoEnabled()) {
                    log.info(String.format("%s(): unhandled exception: %s", pjp.getSignature().getName(),
                            e.getMessage()), e);
                }
            } else if (log.isTraceEnabled()) {
                log.info("unit test exception: " + e.getMessage());
            }
            results = Response.status(Status.INTERNAL_SERVER_ERROR).build();
        } else {
            // DO NOT LOG THE EXCEPTION. That just clutters the log - let
            // the final handler log it.
            throw e;
        }
    }

    return results;
}

From source file:com.isotrol.impe3.pms.core.impl.AuthorizationAspect.java

License:Open Source License

@Around("@annotation(com.isotrol.impe3.pms.core.impl.Authorized)")
public Object global(ProceedingJoinPoint pjp) throws Throwable {
    final Authorization a = component.getAuthorization();
    if (a == null) {
        log(pjp, "Not logged in. Not authorized");
        throw new NoSessionException();
    }/*from w w  w . j a  v  a 2 s  .com*/
    final Method m = ((MethodSignature) (pjp.getSignature())).getMethod();
    final Method targetMethod = pjp.getTarget().getClass().getMethod(m.getName(), m.getParameterTypes());
    final Authorized ann = targetMethod.getAnnotation(Authorized.class);
    // Required global authorities
    final boolean hasGA = ann.global().length > 0;
    // Required portal authorities
    final boolean hasPA = ann.portal().length > 0;
    // If no authorities are required the operation is allowed to proceed.
    if (!hasGA && !hasPA) {
        log(pjp, "No required authorities. Proceed");
        return pjp.proceed();
    }
    // If the user is root and the operation is allowed to root, let it go
    if (a.isRoot() && ann.root()) {
        log(pjp, "Root access allowed. Proceed");
        return pjp.proceed();
    }
    // Global authorities.
    if (hasGA && a.hasGlobal(Arrays.asList(ann.global()))) {
        log(pjp, "Global authorities checked. Proceed");
        return pjp.proceed();
    }
    if (hasPA && a.hasPortal(getPortalId(pjp), Arrays.asList(ann.portal()))) {
        log(pjp, "Portal authorities checked. Proceed");
        return pjp.proceed();
    }
    log(pjp, "Not authorized");
    throw new AuthorizationException();
}

From source file:com.isotrol.impe3.pms.core.impl.TimingAspect.java

License:Open Source License

@Around("@within(org.springframework.stereotype.Service)")
public Object time(ProceedingJoinPoint pjp) throws Throwable {
    final Stopwatch w = Stopwatch.createStarted();
    try {/*w w  w.j  a v a  2s .co  m*/
        return pjp.proceed();
    } finally {
        final long t = w.elapsed(TimeUnit.MILLISECONDS);
        final String key = pjp.getTarget().getClass().getName() + "." + pjp.getSignature().toShortString();
        map.add(key, t);
        if (t > 500) {
            logger.warn(String.format("[%s] took [%d] ms", key, t));
        }
    }
}

From source file:com.jaxio.celerio.aspects.GraphPredicateAspect.java

License:Apache License

@Around("com.jaxio.celerio.aspects.PredicatesAspect.methods()")
public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable {
    depth++;//ww  w  .j a  va2s  .co  m
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < depth; i++) {
        sb.append(' ');
    }
    sb.append(pjp.getSignature());
    log.info(sb.toString());
    Object retVal = pjp.proceed();
    depth--;
    return retVal;
}