`
digyso
  • 浏览: 142193 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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

阅读更多

http://lighter.iteye.com/blog/42673

这一排在复习spring的一些知识点,顺便写一下博客,下面看一下利用spring AOP做的管理权限简单实例;
首先定义一个用户:
Java代码 复制代码
  1. publicclassUser{
  2. privateStringusername;
  3. publicStringgetUsername(){
  4. returnusername;
  5. }
  6. publicvoidsetUsername(Stringusername){
  7. this.username=username;
  8. }
  9. }
用户有三种人:未注册用户,注册用户,与管理员
注册用户可以可以发表,回复帖子
管理员除了可以发表,回复帖子,还可以删除帖子!
下面定义TestCommunity接口:
Java代码 复制代码
  1. publicinterfaceTestCommunity{
  2. publicvoidanswerTopic();
  3. publicvoiddeleteTopic();
  4. }
实现上面接口的TestCommunityImpl类:
Java代码 复制代码
  1. publicclassTestCommunityImplimplementsTestCommunity{
  2. //注册用户与管理员拥有的功能
  3. publicvoidanswerTopic(){
  4. System.out.println("可以发表,回复帖子");
  5. }
  6. //管理员拥有的功能
  7. publicvoiddeleteTopic(){
  8. System.out.println("可以删除帖子!");
  9. }
  10. }
下一步,建立一下依赖注入的实现类TestResultImpl:
Java代码 复制代码
  1. publicclassTestResultImpl{
  2. privateTestCommunitytest;
  3. publicvoidsetTest(TestCommunitytest){
  4. this.test=test;
  5. }
  6. publicvoidanswerTopic()
  7. {
  8. test.answerTopic();
  9. }
  10. publicvoiddeleteTopic()
  11. {
  12. test.deleteTopic();
  13. }
  14. }


接下来,就是最重要的一个类,拦截器,Around处理类型的,类TestAuthorityInterceptor:
Java代码 复制代码
  1. importorg.aopalliance.intercept.MethodInterceptor;
  2. importorg.aopalliance.intercept.MethodInvocation;
  3. //创建Around处理应该实现MethodInterceptor接口
  4. publicclassTestAuthorityInterceptorimplementsMethodInterceptor{
  5. privateUseruser;
  6. publicUsergetUser(){
  7. returnuser;
  8. }
  9. publicvoidsetUser(Useruser){
  10. this.user=user;
  11. }
  12. //invoke方法返回调用的结果
  13. publicObjectinvoke(MethodInvocationinvocation)throwsThrowable{
  14. StringmethodName=invocation.getMethod().getName();
  15. if(user.getUsername().equals("unRegistedUser")){
  16. System.out.println("你的身份是未注册用户,没有权限回复,删除帖子!");
  17. returnnull;
  18. }
  19. if((user.getUsername().equals("user"))
  20. &&(methodName.equals("deleteTopic"))){
  21. System.out.println("你的身份是注册用户,没有权限删除帖子");
  22. returnnull;
  23. }
  24. //proceed()方法对连接点的整个拦截器链起作用,拦截器链中的每个拦截器都执行该方法,并返回它的返回值
  25. returninvocation.proceed();
  26. }
  27. }
配置文件:
Java代码 复制代码
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN""http://www.springframework.org/dtd/spring-beans.dtd">
  3. <beans>
  4. <beanid="authTarget"class="org.test.lighter.TestCommunityImpl"/>
  5. <!--其中的username可以写为admin,user,和unRegistedUser-->
  6. <beanid="user"class="org.test.lighter.User">
  7. <propertyname="username"value="user"/>
  8. </bean>
  9. <!--配置拦截器-->
  10. <beanid="TestAuthorityInterceptor"
  11. class="org.test.lighter.TestAuthorityInterceptor">
  12. <propertyname="user"ref="user"/>
  13. </bean>
  14. <!--配置代理工厂bean-->
  15. <beanid="service"
  16. class="org.springframework.aop.framework.ProxyFactoryBean">
  17. <propertyname="proxyInterfaces">
  18. <value>org.test.lighter.TestCommunity</value>
  19. </property>
  20. <propertyname="target"ref="authTarget"/>
  21. <propertyname="interceptorNames">
  22. <list>
  23. <value>TestAuthorityInterceptor</value>
  24. </list>
  25. </property>
  26. </bean>
  27. <beanid="testResult"class="org.test.lighter.TestResultImpl">
  28. <propertyname="test"ref="service"/>
  29. </bean>
  30. </beans>
再写一个执行文件BeanTest:
Java代码 复制代码
  1. importorg.springframework.context.ApplicationContext;
  2. importorg.springframework.context.support.FileSystemXmlApplicationContext;
  3. publicclassBeanTest{
  4. publicstaticvoidmain(String[]args)throwsException
  5. {
  6. ApplicationContextctx=newFileSystemXmlApplicationContext("src/bean.xml");
  7. TestResultImpltest=(TestResultImpl)ctx.getBean("testResult");
  8. test.answerTopic();
  9. test.deleteTopic();
  10. }
  11. }
执行结果:大家猜一下啦
Java代码 复制代码
  1. 1、如果是管理员,打印出:
  2. 可以发表,回复帖子
  3. 可以删除帖子!
  4. 2、如果是注册用户:
  5. 可以发表,回复帖子
  6. 你的身份是注册用户,没有权限删除帖子
  7. 3、未注册用户:
  8. 你的身份是未注册用户,没有权限回复,删除帖子!
分享到:
评论

相关推荐

    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)的补充,它允许...

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

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

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

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

    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