Spring AOP权限管理简单例子 (收藏)

 

2008-01-16 11:24:57|  分类: spring|字号 订阅

 
 

首先定义一个用户:

public class User {
 
             private String username;

      public String getUsername() {
                   return username;
             }

     public void setUsername(String username) {
                   this.username = username;
             }

}

用户有三种人:未注册用户,注册用户,与管理员

注册用户可以可以发表,回复帖子

管理员除了可以发表,回复帖子,还可以删除帖子!

下面定义TestCommunity接口:

public interface TestCommunity {

     public void answerTopic();

     public void deleteTopic();

}

实现上面接口的TestCommunityImpl类:

public class TestCommunityImpl implements TestCommunity {

           //注册用户与管理员拥有的功能

           public void answerTopic() {

                  System.out.println("可以发表,回复帖子");

          }

          //管理员拥有的功能

          public void deleteTopic() {

                  System.out.println("可以删除帖子!"); 

          }

}

下一步,建立一下依赖注入的实现类TestResultImpl:

public class TestResultImpl {

          private TestCommunity test; 

          public void setTest(TestCommunity test) {

                  this.test = test;

           }

           public void answerTopic() {

                   test.answerTopic();

             }

           public void deleteTopic() {

                    test.deleteTopic();

           }

}

接下来,就是最重要的一个类,拦截器,Around处理类型的,类TestAuthorityInterceptor:

import org.aopalliance.intercept.MethodInterceptor;

import org.aopalliance.intercept.MethodInvocation;

//创建Around处理应该实现MethodInterceptor接口

public class TestAuthorityInterceptor implements MethodInterceptor {

           private User user;

           public User getUser() {

                    return user;

          }

         public void setUser(User user) {

                    this.user = user;

         }

         // invoke方法返回调用的结果

         public Object invoke(MethodInvocation invocation) throws Throwable {

                    String methodName = invocation.getMethod().getName();

                    if (user.getUsername().equals("unRegistedUser")) {

                              System.out.println("你的身份是未注册用户,没有权限回复,删除帖子!");

                               return null;

                     }

                     if ((user.getUsername().equals("user")) && (methodName.equals("deleteTopic"))) {

                              System.out.println("你的身份是注册用户,没有权限删除帖子");

                              return null;

                   }

                  // proceed()方法对连接点的整个拦截器链起作用,拦截器链中的每个拦截器都执行该方法,并返回它的返回值 return invocation.proceed(); }}

配置文件:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

       <bean id="authTarget" class="org.test.lighter.TestCommunityImpl" />

       

      <!-- 其中的username可以写为admin,user,和unRegistedUser -->

       <bean id="user" class="org.test.lighter.User">

               <property name="username" value="user" />

      </bean>

 

      <!-- 配置拦截器 -->

      <bean id="TestAuthorityInterceptor" class="org.test.lighter.TestAuthorityInterceptor">

                <property name="user" ref="user" />

     </bean>

 

      <!-- 配置代理工厂bean -->

      <bean id="service" class="org.springframework.aop.framework.ProxyFactoryBean">

                 <property name="proxyInterfaces">

                           <value>org.test.lighter.TestCommunity</value>

                </property>

                <property name="target" ref="authTarget"/>

                <property name="interceptorNames">

                          <list>

                                 <value>TestAuthorityInterceptor</value>

                          </list>

                  </property>

          </bean>

          <bean id="testResult" class="org.test.lighter.TestResultImpl">

                       <property name="test" ref="service" />

            </bean>

</beans>

再写一个执行文件BeanTest:

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.FileSystemXmlApplicationContext;

public class BeanTest {

          public static void main(String[] args) throws Exception {

                    ApplicationContext ctx = new FileSystemXmlApplicationContext("src/bean.xml");

                    TestResultImpl test = (TestResultImpl)ctx.getBean("testResult");

                    test.answerTopic();

                    test.deleteTopic();

         }

}

 

分享来自:作者:anly_liu

       地址:http://blog.163.com/anly_liu/blog/static/428323142008016112457411/

posted on 2013-02-21 10:24  juan1206  阅读(268)  评论(0编辑  收藏  举报

导航