2013-07-10 36 views
1

我必須登錄我的控制器哪個用戶正在執行操作。而不是在每個控制器的每個方法中寫入日誌消息。我想用aspectj來做。我aspectj模式的方法不起作用

我有一個包com.bbvaglobalnet.manager.controller包含控制器,我希望在這個包和子包的類的所有公共方法中輸出日誌消息。所以看的

Spring aspect oriented programming

節6.2.3.4我想我的表情是這樣的

執行(公衆* com.bbvaglobalnet.manager.controller .. (..))

我的方面的類是以下

package com.bbvaglobalnet.manager.aspects; 

import org.aspectj.lang.JoinPoint; 
import org.aspectj.lang.annotation.Aspect; 
import org.aspectj.lang.annotation.Before; 
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import org.springframework.security.core.context.SecurityContextHolder; 
import org.springframework.stereotype.Component; 
import com.bbvaglobalnet.manager.controller.*; 

@Aspect 
@Component 
public class LogUserAspect { 

private final static Logger LOGGER = LoggerFactory.getLogger(LogUserAspect.class); 

@Before("execution(public * com.bbvaglobalnet.manager.controller..*.*(..))") 
public void logUser2(JoinPoint jp) { 

    LOGGER.info("[User: {}]", SecurityContextHolder.getContext().getAuthentication().getName()); 
} 

}

我知道豆被註冊,我已經用另一種不同的模式和類接縫努力工作

我的Spring AOP的上下文配置

<context:component-scan base-package="com.bbvaglobalnet.manager.aspects" /> 
<aop:aspectj-autoproxy/> 

對不起,我的英語,這不是我第一次語言

回答

0

爲什麼你想用代理包裝控制器?這在我看來好像重新發明輪子。根據servlet規範,如果您想攔截對servlet的調用並對請求和/或響應進行一些處理,則應該仔細查看this