利用Spring中的AOP做权限管理

AOP在Spring中占有很重要的地位,做了一个例子是利用AOP来做一个登陆的身份验证。。希望能对大家有所帮助,使用了AOP可以在不破坏你的代码的前提下帮你完成验证功能。。

转一点AOP的知识:

程序代码:

1、Spring只支持方法拦截,也就是说,只能在方法的前后进行拦截,而不能在属性前后进行拦截。
2、Spring支持四种拦截类型:目标方法调用前(before),目标方法调用后(after),目标方法调用前后(around),以及目标方法抛出异常(throw)。
3、前置拦截的类必须实现MethodBeforeAdvice接口,实现其中的before方法。
4、后置拦截的类必须实现AfterReturningAdvice接口,实现其中的afterReturning方法。
5、前后拦截的类必须实现MethodInterceptor接口,实现其中的invoke方法。前后拦截是唯一可以控制目标方法是否被真正调用的拦截类型,也可以控制返回对象。而前置拦截或后置拦截不能控制,它们不能印象目标方法的调用和返回。



以上可以看出我们要选用实现MethodInterceptor接口的方法来完成这个功能。

代码如下:

接口类的定义:

程序代码:


package com.dragon.study;

public interface ILogin {
     public void login(String name);
}

接口实现类的定义:

程序代码:


package com.dragon.study.Impl;

import com.dragon.study.ILogin;

public class LoginImpl implements ILogin {
     /**
     * Login
     */
     public void login(String name) {
         System.out.println("欢迎 " + name + "登陆!");
     }
}

最重要的拦截器的定义:

程序代码:


package com.dragon.Advice;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;

public class LoginInterceptor implements MethodInterceptor {
     /**
     * Interceptor
     */
     public Object invoke(MethodInvocation arg0) throws Throwable {
         String name = (String)arg0.getArguments()[0];
         if (name.equals("flash")) {
             System.out.println("这才是真正的用户! ");
             return arg0.proceed();
         } else {
             System.out.println("非法的用户~~~ ");
             return null;
         }
     }
}

------------------------------------------------------------------------------------------------

ApplicationContext.xml的定义:

<beans>
<bean id="loginInterceptor" class="com.dragon.Advice.LoginInterceptor"></bean>
<bean id="loginTarget" class="com.dragon.study.Impl.LoginImpl"></bean>
<bean id="login" class="org.springframework.aop.framework.ProxyFactoryBean">
   <property name="proxyInterfaces">
     <value>com.dragon.study.ILogin</value>
   </property>
   <property name="interceptorNames">
     <list>
     <value>loginInterceptor</value>
   </list>
   </property>
   <property name="target">
     <ref bean="loginTarget"/>
   </property>
</bean>
</beans>

OK,以上就是所有代码,下面做一个测试类:

Test类定义:

程序代码:


package com;

import java.io.*;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

import com.dragon.study.ILogin;

public class Test {
     public static void main(String[] args) throws IOException {
         ApplicationContext ctx = new FileSystemXmlApplicationContext("applicationContext.xml");
         ILogin login = (ILogin)ctx.getBean("login");
         login.login("flash"); //用户为flash是正确用户,否则是错误的
     }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值