当前位置: 代码迷 >> Java Web开发 >> 用AOP阻截Service层时,如果取得当前的User对象
  详细解决方案

用AOP阻截Service层时,如果取得当前的User对象

热度:10474   发布时间:2013-02-25 21:06:19.0
用AOP拦截Service层时,如果取得当前的User对象?
做业务日志,通过AOP对Service层的一些操作进行拦截,并把相关操作写入数据库的日志表中

但在此日志表中,有个"操作用户"的字段


@Aspect
public class MyInterceptor {


@Before("execution(* com.aa.*.service.impl.*.*(..))")
public void doBefore(){
//...
}


但在这里,怎么才能得到当前的用户这个对象呢?
struts2中ServletActionContext.getRequest().getSession()7楼,的确是个好主意。  但是真实项目中会不会这么用呢?在SERVICE里定义USER变量,在INTERCEPTOR里通过ACTIONCONTEXT获得被拦截的ACTION,然后调用USER的GETTER就可以获得了。
如果是用户的话可以直接把UID放在SESSION里先搞清楚你要操作的User是从哪里得出来的,然后再想办法存在某个容器当中,在serivce中直接去调用那个容器,这不就行了吗。WebUtils里面应该有方法可以取到  我以前是这么处理的 


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

如果取不到,说明这个方法不直接与用户相关。
所以你记录用户也没有啥意义,所以建议你就空着这个字段就好了DOBEFORE你要記錄什麽?
而且誰說攔截不到SESSION和REQUEST?
  相关解决方案