2017-03-07 2 views
1

Ich versuche, Feder AOP @Before zu implementieren. Hier ist die MethodeWie man von AOP zurückkommt, bevor die Methode bei der Validierung fehlgeschlagen ist

@Before("execution(* com.dummy.pkg..*.*(..))") 
    public Response<Object> beforeServiceAspect(JoinPoint joinPoint) throws Exception { 

      Object[] signatureArgs = joinPoint.getArgs(); 

      String sessionId=(String) signatureArgs[0]; 


     if(null==sessionId||sessionId.isEmpty()||!loginService.getUserInfo(sessionId)) 
      { 
       Response.setStatusCode("401"); 
       Response.setC 
       Response.setResultString("Unauthorized User"); 
        return Response;  
//this is where i want to return in case of program enter here 
//**point 1** 
      } 
    //**point 2** where execution reaches then resume normal flow 
return ""; 
} 

Hier ist zwei, was ich Wanat

  1. zu erreichen Wenn Fluss Punkt 1 erreicht dann von diesem Punkt zurückkehren itself.It nicht weiter gehen sollte und rufen Sie zurück zurück .
  2. Wenn der Durchfluss den Punkt 2 erreicht, wird der normale Durchfluss wieder aufgenommen und die interne Methode aufgerufen. Was jetzt passiert, ist in beiden Fällen, dass es normal fließt und interne Methoden aufruft.

Antwort

1

Sie benötigen eine @Around Beratung anstelle einer @Before Beratung, wenn Sie den Kontrollfluss ändern möchten.

@Around("execution(* com.dummy.pkg..*.*(..))") 
public Response<Object> beforeServiceAspect(ProceedingJoinPoint joinPoint) throws Exception { 

     Object[] signatureArgs = joinPoint.getArgs(); 

     String sessionId=(String) signatureArgs[0]; 


    if(null==sessionId || sessionId.isEmpty() || !loginService.getUserInfo(sessionId)) 
     { 
      Response.setStatusCode("401"); 
      Response.setResultString("Unauthorized User"); 
      return Response;  
     } 
    return joinPoint.proceed(args); 
} 
Verwandte Themen