2016-10-19 7 views
0

私は、次のしている:春ControllerLoggingAspect doesntのインターセプト法

@Pointcut("execution(*com.shop.controller.OrderController.save(..))") 
public void savingOrder() { 
    log.info("Saving order details"); 
} 

@Before("savingOrder() && args(..,request)") 
public void logSavingOrder(JoinPoint joinPoint, HttpServletRequest request){ 
    log.info("Saving"); 
} 

しかし、ログが表示されることは決してありません。

私は、次の試してください。

@Pointcut("execution(* com.shop.controller.OrderController.saveOrder(..))") 
public void savingOrder() { 
    log.info("Saving order details");/**/ 
} 

@Before("savingOrder()") 
public void logSavingOrder(JoinPoint joinPoint){ 
    log.info("Saving order"); 
} 

すべての作品を。しかし、HttpServletRequestにアクセスする必要があります。

私が間違っていることに関するアイデアはありますか?

答えて

1

、傍受法のメソッドシグネチャで、次のいずれかの方法で傍受法の内部アクセスを、それを追加しないでください:Beanは、要求はあなたがautowireすることができますスコープされた場合

をHttpServletRequestのように:

@Component 
@Scope("request") 
public class Foo { 
    @Autowired private HttpServletRequest request; 

    // 
} 

次のようにそうしないと、現在の要求を取得することができます:

ServletRequestAttributes sra = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes(); 
HttpServletRequest req = sra.getRequest();  

これは、スレッドローカルのカバーの下を使用しています。

あなたが必要とするすべてのSpring MVCを使用している場合。 Spring MVCを使用していない場合は、web.xmlにRequestContextListenerまたはRequestContextFilterを登録する必要があります。

関連する問題