转载:http://lighter.iteye.com/blog/42673
复习笔记:利用spring AOP管理权限[简单实例]
这一排在复习spring的一些知识点,顺便写一下博客,下面看一下利用spring AOP做的管理权限简单实例;
首先定义一个用户:
代码
- public class User {
- private String username;
-
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- }
<script>render_code();</script>
用户有三种人:未注册用户,注册用户,与管理员
注册用户可以可以发表,回复帖子
管理员除了可以发表,回复帖子,还可以删除帖子!
下面定义TestCommunity接口:
代码
- public interface TestCommunity {
- public void answerTopic();
- public void deleteTopic();
- }
<script>render_code();</script>
实现上面接口的TestCommunityImpl类:
代码
- public class TestCommunityImpl implements TestCommunity {
-
- public void answerTopic() {
- System.out.println("可以发表,回复帖子");
- }
-
- public void deleteTopic() {
- System.out.println("可以删除帖子!");
- }
- }
<script>render_code();</script>
下一步,建立一下依赖注入的实现类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();
- }
- }
<script>render_code();</script>
接下来,就是最重要的一个类,拦截器,Around处理类型的,类TestAuthorityInterceptor:
代码
- import org.aopalliance.intercept.MethodInterceptor;
- import org.aopalliance.intercept.MethodInvocation;
-
-
- public class TestAuthorityInterceptor implements MethodInterceptor {
- private User user;
-
- public User getUser() {
- return user;
- }
- public void setUser(User user) {
- this.user = user;
- }
-
-
- 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;
- }
-
- return invocation.proceed();
- }
-
- }
<script>render_code();</script>
配置文件:
代码
- <?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" />
-
-
- <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 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>
<script>render_code();</script>
再写一个执行文件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();
- }
- }
<script>render_code();</script>
执行结果:大家猜一下啦
代码
- 1、如果是管理员,打印出:
- 可以发表,回复帖子
- 可以删除帖子!
-
- 2、如果是注册用户:
- 可以发表,回复帖子
- 你的身份是注册用户,没有权限删除帖子
-
- 3、未注册用户:
- 你的身份是未注册用户,没有权限回复,删除帖子!
<script>render_code();</script>
分享到:
相关推荐
Spring的核心特性是控制反转(IOC)和面向切面编程(AOP)。它提供了一个全面的编程和配置模型,可以用于构建各种类型的Java应用程序,包括Web应用。 1. **Spring介绍** - **侵入式概念**:传统Java EE应用中,...
马士兵老师的Spring框架学习笔记会详细讲解这些概念,并结合实例帮助读者理解并掌握如何在实际项目中应用Spring框架。通过学习,你可以提升Java开发技能,更好地理解和运用Spring生态,为你的职业发展奠定坚实基础。
Spring 与 Struts 整合主要目的是利用 Spring 的 IoC 容器管理 Struts 中的 Action 对象,减少对象的重复实例化,提高性能。整合步骤包括: 1. 手动方式:Struts Action 非单例,每次请求都会实例化新的 Action,...
动力节点老杜Spring6配套笔记主要讲解了Spring框架的一些核心概念和最佳实践,特别是针对代码设计中的开闭原则(Open-Closed Principle, OCP)进行了深入探讨。在给出的代码示例中,我们可以看到一个简单的用户登录...
Spring框架是Java开发中不可或缺的一部分,它以其IoC(控制反转)和AOP(面向切面编程)的核心特性,极大地简化了企业级应用的开发。本资料“Spring学习笔记&源码”是基于网易云课堂黑马程序员的Spring四天精通课程...
Spring 笔记 Spring 是 Java 企业版(Java EE)应用程序的框架,提供了结构化的配置文件,实现了控制反转(IoC)和面向切面编程(AOP),支持表现层、业务逻辑层和持久层。Spring 的核心是 IoC 和 AOP,能够与主流...
这份笔记涵盖了Spring的核心概念和技术,包括IOC(Inverse of Control,控制反转)、DI(Dependency Injection,依赖注入)、AOP(Aspect Oriented Programming,面向切面编程)以及Spring事务管理。以下是对这些...
在传统开发中,对象通常会自行创建依赖的对象,而在Spring中,开发者只需定义对象及其依赖关系,由Spring容器负责实例化、装配以及管理这些对象。 1. **Bean定义**:在Spring中,业务对象被称为Bean。Bean定义包含...
Spring框架是Java开发中的核心组件,它以其IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)两大特性而著名,为开发者提供了全面的解决方案,包括依赖注入、数据访问、...
在Spring5中,开发者不再需要手动创建和管理对象,而是由Spring容器负责实例化、装配和管理,这使得代码更易于测试和维护。 2. **依赖注入(DI)**: 作为IoC的一种实现方式,依赖注入允许对象通过构造函数、...
3. **AOP(面向切面编程)**:Spring的AOP模块支持声明式事务管理、日志记录、性能监控等。切面是包含关注点的模块化单元,可以将横切关注点如事务逻辑应用到多个对象上。 4. **IoC容器与Bean生命周期**:Spring ...
因此,这部分笔记可能涵盖了如何使用这些工厂来实例化和管理Spring Bean。 基于以上分析,我们可以期待这篇"spring学习笔记(3.20)"中包含以下知识点: 1. **Spring框架基础**:介绍Spring的基本概念、架构和核心...
Spring框架的核心特性包括轻量级、控制反转(IoC)、面向切面编程(AOP)、容器化管理和框架集合,使其在与其他框架的整合上非常灵活。 在Spring中,bean的注入与装配是核心概念之一,有多种方式可以实现,例如XML...
### Spring学习笔记知识点详解 #### 一、Spring框架概述 **1.1 什么是Spring** Spring框架是一个开源的轻量级应用框架,主要用于简化企业级应用程序的开发过程。它的核心特性在于提供了一种灵活的方式来组织和...
### Spring学习笔记知识点详解 #### 一、Spring框架概述 **Spring** 是一个开源的、分层的企业级应用开发框架,旨在简化Java EE应用程序的开发。它的主要目标是提高开发效率,减少耦合度,并提供一种更为简洁的...
- AOP编程支持:Spring提供AOP机制,可以方便地实现横切关注点,如事务管理、日志记录等,提高代码的复用性。 - 声明式事务管理:Spring支持声明式事务,通过注解或XML配置即可实现事务的统一管理,无需手动编写事务...
- **面向切面编程(AOP)**:Spring提供了强大的面向切面编程支持,允许开发者将横切关注点(如日志记录、事务管理等)从业务逻辑中分离出来。 - **事务处理**:Spring提供了一套完整的事务管理机制,可以方便地集成到...
2. **AOP(面向切面编程)**:AOP是Spring框架中的一个重要特性,用于处理系统中分散的、与业务逻辑无关的横切关注点,如日志记录、权限检查、事务管理等。AOP通过定义切面、通知(advice)、切入点(pointcut)等...