做业务日志,通过AOP对Service层的一些操作进行拦截,并把相关操作写入数据库的日志表中但在此日志表中,有个"操作用户"的字段
@Aspect
public class MyInterceptor {
@Before("execution(* com.aa.*.service.impl.*.*(..))")
public void doBefore(){
//...
}
但在这里,怎么才能得到当前的用户这个对象呢?

解决方案 »

  1.   

    在SERVICE里定义USER变量,在INTERCEPTOR里通过ACTIONCONTEXT获得被拦截的ACTION,然后调用USER的GETTER就可以获得了。
    如果是用户的话可以直接把UID放在SESSION里
      

  2.   

    在这一层,是无法获取到requerst 或 session的啊
      

  3.   

    DOBEFORE你要記錄什麽?
    而且誰說攔截不到SESSION和REQUEST?
      

  4.   

    楼上,那你如何获取呢?@Aspect @Component
    public class MyInterceptor {    @Resource private LogDao logDao;    @Before("execution(* com.aa.*.service.impl.*.*(..))")
        public void doBefore(){
            Log log = new Log();
            log.setDesc("...");
            logDao.add(log, userId);
            //...
        }
    现在主要是当前User里面的userId无法得到
      

  5.   

    先搞清楚你要操作的User是从哪里得出来的,然后再想办法存在某个容器当中,在serivce中直接去调用那个容器,这不就行了吗。
      

  6.   

    我以前是这么处理的 
    1、在web.xml中增加一个Filter; 
    2、在该Filter中将HttpSession置入一个ThreadLocal的对象中; 
    3、在拦截器中get这个ThreadLocal对象;
      

  7.   

    WebUtils里面应该有方法可以取到  
      

  8.   

    struts2中ServletActionContext.getRequest().getSession()
      

  9.   

    在BaseAction中定义ThreadLocal 然后再 setSession方法中 threadLocal.put(session);
    我也遇到这个问题,正在寻求解决办法...