论坛首页 Java企业应用论坛

在Struts中应用AOP的疑问

浏览 4911 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2004-12-13  
网上关于整合struts+spring+hibernate的文章中,通常spring是应用在bussiness层。UI层则完全交由struts去处理。由于想把权限认证的功能利用spring的AOP特性与业务逻辑分离,所以产生了一些疑问:

1、业务逻辑通常很少考虑当前用户这个属性。比如一个业务方法transferInfo(),在临时表与正式表之间转移数据。我不可能在这个transferInfo方法的参数里加上当前用户的信息。如果要使用AOP截取这个方法进行权限认证,似乎是不可能的,因为没有当前用户的信息。

2、因此考虑到必须在struts的Action中,对执行的方法进行截取,同时进行权限认证(因为在Action里可以得到当前用户的信息)。但是struts的Action必须继承Action类,如何才能利用到spring的AOP特性,以便能够对action的执行方法进行截取呢?

以上这两点,不知各位是如何考虑的?或者这种方式就有本质性的错误?还望指教。
   发表时间:2004-12-13  
忘了说明,因为没有用EJB,所以不能像ejb一样,web层的登录信息可以自动传递到ejb层
0 请登录后投票
   发表时间:2004-12-13  
这个太简单了。从web层把用户信息放进ThreadLocal,负责安全的aspect从ThreadLocal取就行了。
0 请登录后投票
   发表时间:2004-12-14  
gigix 写道
这个太简单了。从web层把用户信息放进ThreadLocal,负责安全的aspect从ThreadLocal取就行了。


好的,多谢指点,像下面这个初步实现,不知道有没有问题?

public class LoginSession {
	private static final ThreadLocal loginSession = new ThreadLocal();;
	
	public static LoginInfo getLoginInfo();{
		LoginInfo info = (LoginInfo);loginSession.get();;
		return info;
	}
	
	public static void setLoginInfo(LoginInfo info);{
		loginSession.set(info);;
	}
}


每个请求会经过一个filter,在filter里面,我会取出session中的LoginInfo,并且把它放到ThreadLocal里(通过上面那个简单的类),然后在后台分离的权限认证代码里面通过这个类取出LoginInfo来进行相关的认证。不知这样写有没有问题?
0 请登录后投票
   发表时间:2004-12-14  
呵呵,有没有问题别问我呀,做起来看看才知道。
0 请登录后投票
   发表时间:2004-12-16  
呵呵,我已经用起来了,目前来看没有什么问题,我的意思是你一眼看上去会不会发现问题,也就是有没有什么明显的错误之类的。比如用static final 会不会产生一些不可预知的错误。只有对这一块非常熟悉的人才能知道这样用究竟会不会对以后造成问题。我现在只是刚刚开始,如果能及早发现那些非常明显的原则性错误的话,那是最好不过了。

非常感谢你的提醒和建议  :)
0 请登录后投票
   发表时间:2004-12-28  
struts的excute方法本身就有钩子可以截取,何必再用aop这么复杂呢?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics