精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2005-06-22
那么如何在我的拦截器类中获取容器的request(HttpRequest)对象呢?? import java.lang.reflect.Method; import org.springframework.aop.MethodBeforeAdvice; import org.apache.log4j.*; public class AuthorizeAdvice implements MethodBeforeAdvice { Logger logger = Logger.getLogger(AuthorizeAdvice.class); public AuthorizeAdvice() { PropertyConfigurator.configure("log4j_2.properties"); } public void before(Method m, Object[] args, Object target) throws Throwable { if(!User.Permission(){ 在这里获取容器的request对象?? request.^^^^^ } } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2005-06-22
用threadlocal装一个context对象,本来权限控制就是要依赖于上下文的,可以参考acegi的相关实现,而且你这个思路acegi实现的不错,不必再重复造轮子了
|
|
返回顶楼 | |
发表时间:2005-07-01
楼主看来还是没有明白AOP的含义,很明显的嘛,public void before(Method m, Object[] args, Object target)
Method就是你要拦截的方法名称,而args就是方法的参数。 如果你的方法是aaa(HttpServletRequest request,HttpServletResponse response) 那在你的before里只要 HttpServletRequest request=(HttpServletRequest )args[0]就ok了。 |
|
返回顶楼 | |
发表时间:2005-07-01
对了,关于这个利用AOP拦截的东西,我以前的帖子也提到过的,建议你还是使用Filter比较好些,用来做粗粒度控制,然后用AOP对具体的来做权限的细分。
|
|
返回顶楼 | |
发表时间:2005-07-25
giginet 写道 楼主看来还是没有明白AOP的含义,很明显的嘛,public void before(Method m, Object[] args, Object target)
Method就是你要拦截的方法名称,而args就是方法的参数。 如果你的方法是aaa(HttpServletRequest request,HttpServletResponse response) 那在你的before里只要 HttpServletRequest request=(HttpServletRequest )args[0]就ok了。 你这样弄肯定不好,一般在controller里面都是调用的service层的接口,你这么做不就是把service传到service layer了? 最好的办法还是参考acegi里面的方法,其实这是需要的知识一个ContextHolder和一个RequestContext。用ThreadLocal实现。具体参考acegi的源码,很简单的 |
|
返回顶楼 | |
发表时间:2005-07-27
阿木欢 写道 giginet 写道 楼主看来还是没有明白AOP的含义,很明显的嘛,public void before(Method m, Object[] args, Object target)
Method就是你要拦截的方法名称,而args就是方法的参数。 如果你的方法是aaa(HttpServletRequest request,HttpServletResponse response) 那在你的before里只要 HttpServletRequest request=(HttpServletRequest )args[0]就ok了。 你这样弄肯定不好,一般在controller里面都是调用的service层的接口,你这么做不就是把service传到service layer了? 最好的办法还是参考acegi里面的方法,其实这是需要的知识一个ContextHolder和一个RequestContext。用ThreadLocal实现。具体参考acegi的源码,很简单的 我说的这个和service层有什么关系呢?这个本来就是对structs action的拦截啊。而且AOP本来就有这个坏处,有很多都是和具体应用相关系的,很容易和系统“绑死”。 提外话:谁说service传到service layer里就不可以呢? |
|
返回顶楼 | |
发表时间:2005-07-27
giginet 写道 阿木欢 写道 giginet 写道 楼主看来还是没有明白AOP的含义,很明显的嘛,public void before(Method m, Object[] args, Object target)
Method就是你要拦截的方法名称,而args就是方法的参数。 如果你的方法是aaa(HttpServletRequest request,HttpServletResponse response) 那在你的before里只要 HttpServletRequest request=(HttpServletRequest )args[0]就ok了。 你这样弄肯定不好,一般在controller里面都是调用的service层的接口,你这么做不就是把service传到service layer了? 最好的办法还是参考acegi里面的方法,其实这是需要的知识一个ContextHolder和一个RequestContext。用ThreadLocal实现。具体参考acegi的源码,很简单的 我说的这个和service层有什么关系呢?这个本来就是对structs action的拦截啊。而且AOP本来就有这个坏处,有很多都是和具体应用相关系的,很容易和系统“绑死”。 提外话:谁说service传到service layer里就不可以呢? sorry,笔误笔误:( ![]() 我的意思是说,你不应该把HttpServletRequest 做为参数传到service layer。这么做的坏处,你也应该知道吧。 这个不是AOP的坏处,有办法解决AOP的上下文问题,上面的帖子里面已经说到了。 |
|
返回顶楼 | |
发表时间:2005-07-27
仔细看了一下,楼主是在拦截action啊,呵呵,不好意思,我还以为是在action里面拦截service呢。
|
|
返回顶楼 | |
发表时间:2005-07-27
为什么不改用webwork?简单的多啊!
|
|
返回顶楼 | |
发表时间:2005-07-28
呵呵,我说的AOP容易绑死是指:如果你用一个框架的AOP,譬如Spring,那么这段代码就和spring绑死了,不象ioc来的那么痛快,而且本身这个也不符合OO规则,但是这个功能的确非常实用。
|
|
返回顶楼 | |