首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

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

2013-01-11 
用AOP拦截Service层时,如果取得当前的User对象?做业务日志,通过AOP对Service层的一些操作进行拦截,并把相

用AOP拦截Service层时,如果取得当前的User对象?
做业务日志,通过AOP对Service层的一些操作进行拦截,并把相关操作写入数据库的日志表中

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


@Aspect
public class MyInterceptor {


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


但在这里,怎么才能得到当前的用户这个对象呢?
[解决办法]
在SERVICE里定义USER变量,在INTERCEPTOR里通过ACTIONCONTEXT获得被拦截的ACTION,然后调用USER的GETTER就可以获得了。
如果是用户的话可以直接把UID放在SESSION里
[解决办法]
如果取不到,说明这个方法不直接与用户相关。
所以你记录用户也没有啥意义,所以建议你就空着这个字段就好了
[解决办法]
DOBEFORE你要記錄什麽?
而且誰說攔截不到SESSION和REQUEST?
[解决办法]
先搞清楚你要操作的User是从哪里得出来的,然后再想办法存在某个容器当中,在serivce中直接去调用那个容器,这不就行了吗。
[解决办法]
我以前是这么处理的 


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


[解决办法]
WebUtils里面应该有方法可以取到  
[解决办法]
struts2中ServletActionContext.getRequest().getSession()
[解决办法]
7楼,的确是个好主意。  但是真实项目中会不会这么用呢?

热点排行