你说的这个可以用aop, 我以前也是这么用的,在做一件事情前判断这个user是否有足够的权限。用前增加就行, 不用环绕增强吧 

解决方案 »

  1.   

    spring前增加的接口:void before(Method method, Object[] args, Object target) throws Throwable;这个方法的调用结果没有返回值,是否有足够权限应该是调用返回boolean类型的方法吧?前增如何判断是否有足够权限呢?
      

  2.   

    对不起啊,搂住.我以前写是用strut2自己写拦截器判断权限.
    不是spring的增强...搞混了, ..
    spring的前后增强无返回值,只有环绕增强MethodInterceptoer可以返回Object,你可以用环绕.
    或者前增强抛出异常,表明权限不够.这也是可以的...
      

  3.   

    呵呵,客气了...我上面的方法应该是:
    public String visiteDocument(Doc doc){ 
      doc.open(); 
      return somestring;
    } 对这个方法用环绕的时候,我想不明白了:
    环绕它的返回指好像是拦截方法visiteDocument的返回值somestring(如下),这样的话,其实方法已经执行完了,起不到权限控制的作用,是不是我理解错了?
      

  4.   

    环绕增加在进这visiteDocument方法之前 可以做一些判断,user符合要求进visiteDocument方法,不符合要求直接return ,somestring。就是要实现一个MethodInterceptor:
    public class LoginAroundAdvice implements MethodInterceptor {
     public object invoke(MethodInvocation  invo) throws Throwable{
      Object[] args = invo.getArguments();
         if (!args[0].equals("admin")) {
           throw new SecurityException("Rejected");
         }
         return invo.proceed();
    }
    }这段保证非admin不能调用visiteDocument方法
      

  5.   

    哦,如果是这样就好了。你确定MethodInvocation有getArguments方法吗?我在spring源代码中只看到一个org.aopalliance.intercept.MethodInvocation,里面只有一个getMethod方法,这样不能拿到参数,可能误导我了。谢谢你了^_^
      

  6.   

    我倒搂主你就不能看看MethodInvocation继承了什么吗 ?
    你看他父类有没有那个方法
    我给你的例子是跑错测试的晕阿你试过了再说啊, 怎么就说我误导你呢 
      

  7.   

    强烈要求楼主仔细看源代码父类里是有getArguments()方法的。