`
menjoy
  • 浏览: 420543 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

利用spring AOP管理权限[简单实例]

阅读更多

From:http://lighter.iteye.com

下面看一下利用spring AOP做的管理权限简单实例;
首先定义一个用户:

代码
  1. public class User {   
  2.     private String username;   
  3.   
  4.     public String getUsername() {   
  5.         return username;   
  6.     }   
  7.     public void setUsername(String username) {   
  8.         this.username = username;   
  9.     }   
  10. }  
<script>render_code();</script>
用户有三种人:未注册用户,注册用户,与管理员
注册用户可以可以发表,回复帖子
管理员除了可以发表,回复帖子,还可以删除帖子!
下面定义TestCommunity接口:
代码
  1. public interface TestCommunity {   
  2.   public void answerTopic();   
  3.   public void deleteTopic();   
  4. }  
<script>render_code();</script>

 

实现上面接口的TestCommunityImpl类:

代码
  1. public class TestCommunityImpl implements TestCommunity {   
  2.     //注册用户与管理员拥有的功能   
  3.     public void answerTopic() {   
  4.         System.out.println("可以发表,回复帖子");   
  5.     }   
  6.     //管理员拥有的功能   
  7.     public void deleteTopic() {   
  8.         System.out.println("可以删除帖子!");   
  9.     }   
  10. }  
<script>render_code();</script>

 

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

代码
  1. public class TestResultImpl {   
  2.     private TestCommunity test;   
  3.   
  4.     public void setTest(TestCommunity test) {   
  5.         this.test = test;   
  6.     }      
  7.      public void answerTopic()   
  8.      {   
  9.          test.answerTopic();   
  10.      }   
  11.       public void deleteTopic()   
  12.       {   
  13.           test.deleteTopic();   
  14.       }   
  15. }  
<script>render_code();</script>

 

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

代码
  1. import org.aopalliance.intercept.MethodInterceptor;   
  2. import org.aopalliance.intercept.MethodInvocation;   
  3.   
  4. //创建Around处理应该实现MethodInterceptor接口   
  5. public class TestAuthorityInterceptor implements MethodInterceptor {   
  6.     private User user;   
  7.   
  8.     public User getUser() {   
  9.         return user;   
  10.     }   
  11.     public void setUser(User user) {   
  12.         this.user = user;   
  13.     }   
  14.   
  15.     // invoke方法返回调用的结果   
  16.     public Object invoke(MethodInvocation invocation) throws Throwable {   
  17.         String methodName = invocation.getMethod().getName();   
  18.   
  19.         if (user.getUsername().equals("unRegistedUser")) {   
  20.             System.out.println("你的身份是未注册用户,没有权限回复,删除帖子!");   
  21.             return null;   
  22.         }   
  23.         if ((user.getUsername().equals("user"))   
  24.                 && (methodName.equals("deleteTopic"))) {   
  25.             System.out.println("你的身份是注册用户,没有权限删除帖子");   
  26.             return null;   
  27.         }   
  28.         // proceed()方法对连接点的整个拦截器链起作用,拦截器链中的每个拦截器都执行该方法,并返回它的返回值   
  29.         return invocation.proceed();   
  30.     }   
  31.   
  32. }   
<script>render_code();</script>

 

配置文件:

代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">  
  3. <beans>  
  4.     <bean id="authTarget" class="org.test.lighter.TestCommunityImpl" />  
  5.   
  6.     <!-- 其中的username可以写为admin,user,和unRegistedUser -->  
  7.     <bean id="user" class="org.test.lighter.User">  
  8.         <property name="username" value="user" />  
  9.     </bean>  
  10.   
  11.     <!-- 配置拦截器 -->  
  12.     <bean id="TestAuthorityInterceptor"  
  13.         class="org.test.lighter.TestAuthorityInterceptor">  
  14.         <property name="user" ref="user" />  
  15.     </bean>  
  16.   
  17.     <!-- 配置代理工厂bean -->  
  18.     <bean id="service"  
  19.         class="org.springframework.aop.framework.ProxyFactoryBean">  
  20.         <property name="proxyInterfaces">  
  21.             <value>org.test.lighter.TestCommunity</value>  
  22.         </property>  
  23.         <property name="target" ref="authTarget"/>  
  24.         <property name="interceptorNames">  
  25.             <list>  
  26.                 <value>TestAuthorityInterceptor</value>  
  27.             </list>  
  28.         </property>  
  29.     </bean>  
  30.   
  31.     <bean id="testResult" class="org.test.lighter.TestResultImpl">  
  32.         <property name="test" ref="service" />  
  33.     </bean>  
  34. </beans>  
<script>render_code();</script>

 

再写一个执行文件BeanTest:

代码
  1. import org.springframework.context.ApplicationContext;   
  2. import org.springframework.context.support.FileSystemXmlApplicationContext;   
  3.   
  4. public class BeanTest {   
  5.   public static void main(String[] args) throws Exception   
  6.   {   
  7.       ApplicationContext ctx = new FileSystemXmlApplicationContext("src/bean.xml");   
  8.       TestResultImpl test = (TestResultImpl)ctx.getBean("testResult");   
  9.       test.answerTopic();   
  10.       test.deleteTopic();   
  11.   }   
  12. }  
<script>render_code();</script>

 

执行结果:大家猜一下啦

代码
  1. 1、如果是管理员,打印出:   
  2. 可以发表,回复帖子   
  3. 可以删除帖子!   
  4.   
  5. 2、如果是注册用户:   
  6. 可以发表,回复帖子   
  7. 你的身份是注册用户,没有权限删除帖子   
  8.   
  9. 3、未注册用户:   
  10. 你的身份是未注册用户,没有权限回复,删除帖子!  
<script>render_code();</script>
分享到:
评论

相关推荐

    spring aop权限小实例

    在IT行业中,Spring框架是Java企业级应用开发的首选,而Spring AOP(Aspect Oriented Programming,面向切面编程)是其核心特性之一,用于处理系统中的横切关注点,如日志、事务管理等。本实例将深入探讨如何在...

    Spring Aop使用实例

    **Spring AOP 使用实例** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个重要组成部分,它提供了一种在不修改原有代码的情况下,通过代理方式添加额外功能的技术。这种技术使得我们...

    spring aop 附带测试实例

    在提供的压缩包文件"springAOP"中,可能包含了以下内容: - **切面类(Aspect Class)**:包含切点和通知的Java类,可能使用了`@Aspect`注解。 - **目标类(Target Class)**:被AOP代理的对象,通常包含业务逻辑。...

    spring aop xml 实例

    Spring AOP的XML配置实例展示了如何将横切关注点(如日志、事务等)与业务逻辑解耦,提高了代码的可复用性和可维护性。这种编程模式在大型项目中尤其有用,因为它使得系统的结构更加清晰,每个组件都专注于自己的...

    SpringMVC+springAOP+spring security+Hibernate整合实例代码

    在本实例中,Spring AOP可能被用来实现事务管理,确保数据库操作的一致性。 3. Spring Security:这是一个强大的安全框架,提供认证、授权和会话管理等功能。Spring Security可以保护你的应用免受各种攻击,如跨站...

    spring 应用aop 实例

    在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者将关注点从核心业务逻辑中分离出来,比如日志记录、事务管理、权限控制等。本实例将深入探讨如何在Spring 4.0版本中实现AOP。 首先,AOP的...

    spring_aop_拦截实例

    在Spring框架中,AOP(面向切面编程)是一种强大的工具,它允许程序员定义横切关注点,如日志、事务管理、性能监控等,并将它们模块化为可重用的组件,称为切面。本实例主要探讨如何在Spring AOP中实现拦截器。 ...

    spring aop

    在Web项目中,Spring AOP通常用于处理跨多个控制器和业务层方法的通用任务,如记录请求日志、验证权限、事务管理等。通过配置或注解,你可以确保这些逻辑在每次相关方法执行时自动触发,从而提高代码的可读性和可...

    spring-aop实例demo

    在Spring框架中,AOP(面向切面编程)是一种强大的工具,它允许程序员定义“切面”,这些切面封装了应用程序中的交叉关注点,如日志、事务管理、权限检查等。Spring AOP是基于代理的,它可以为普通Java对象(POJOs)...

    spring AOP的代码实例

    以下是一个简单的Spring AOP代码实例,用于展示如何创建切面、通知以及如何配置切入点: 1. 首先,定义一个切面类,包含一个前置通知: ```java @Aspect @Component public class LoggingAspect { @Before(...

    spring aop学习实例

    在实际的项目中,Spring AOP常用于事务管理、日志记录、性能监控、权限控制等场景。理解并熟练掌握Spring AOP,可以帮助我们编写更加模块化、可维护的代码,提升代码质量。通过上述的讲解,相信你已经对Spring AOP有...

    SpringAOP.zip

    9. **实际应用场景**:课程可能还会通过实例讲解AOP在实际项目中的应用,如记录日志、事务管理、权限校验等。 10. **最佳实践**:了解如何优雅地使用AOP,避免滥用导致的代码复杂性增加,以及如何进行测试和调试AOP...

    springAop默认代理方式.zip

    8. **AOP应用场景**:Spring AOP广泛应用于日志记录、事务管理、权限控制、缓存管理等场景。通过切面可以将这些通用功能与业务逻辑解耦,提高代码的可维护性和可重用性。 总之,Spring AOP的默认代理方式是动态代理...

    spring aop小实例

    本文将基于"spring aop小实例"的标题,结合描述中的链接,深入探讨Spring AOP的基本概念、工作原理以及如何通过实际示例来理解和应用。 1. **AOP基本概念** - 面向切面编程(AOP)是面向对象编程(OOP)的补充,它允许...

    mybatis 拦截器 + spring aop切面 + spring事务+ 反射工具类

    在IT行业中,MyBatis、Spring AOP、Spring事务管理和反射工具类是常见的技术栈,它们在构建高效、灵活的企业级应用中起着至关重要的作用。以下是对这些知识点的详细阐述: 1. MyBatis拦截器(MyBatis Interceptor)...

    Maven 项目 Spring Aop 用户注册 实例 代码.rar

    在本实例中,我们主要探讨的是如何利用Maven构建一个基于Spring框架的Web应用程序,特别是关注Spring AOP(面向切面编程)在用户注册功能中的应用。Maven是一个强大的项目管理和依赖管理工具,它帮助开发者组织和...

    JDK动态代理 spring aop 的原理

    Spring AOP(面向切面编程)则是一种流行的应用框架,它利用动态代理来实现对业务代码的切面增强,如日志、事务管理等。现在让我们深入探讨JDK动态代理和Spring AOP的原理。 首先,JDK动态代理基于Java的反射机制,...

    使用Spring配置文件实现AOP

    在Spring框架中,面向切面编程(Aspect Oriented Programming,简称AOP)是一种强大的设计模式,它允许我们定义横切关注点,如日志、事务管理、权限检查等,然后将这些关注点与核心业务逻辑解耦。这篇教程将详细讲解...

    spring 2.0使用AOP实例(基于Annotation的配置方式)

    在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者将关注点从业务逻辑中分离出来,比如日志记录、事务管理、权限检查等。Spring 2.0引入了基于注解的AOP配置,极大地简化了AOP的使用。这篇...

Global site tag (gtag.js) - Google Analytics