Model 就不给了,直接给业务逻辑。
beas.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> <context:annotation-config /> <context:component-scan base-package="com.vti"></context:component-scan> <bean id="articleService" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="proxyInterfaces"> <value>com.vti.service.ArticleService</value> </property> <property name="target" ref="authTarget"/> <property name="interceptorNames"> <list> <value>authority</value> </list> </property> </bean> </beans>
daoimpl
package com.vti.dao.impl; import org.springframework.stereotype.Component; import com.vti.dao.ArticleDao; import com.vti.model.Article; @Component(value="articleDao") public class ArticleDaoImpl implements ArticleDao{ @Override public void addArticle(Article article) { System.out.println("文章添加成功!"); } @Override public void delArticle(Article article) { System.out.println("文章删除成功!"); } @Override public void getArticle() { System.out.println("阅读文章成功"); } }
artcleServiceImpl
package com.vti.service.impl; import javax.annotation.Resource; import org.springframework.stereotype.Component; import com.vti.dao.ArticleDao; import com.vti.model.Article; import com.vti.service.ArticleService; @Component(value="authTarget") public class ArticleServiceImpl implements ArticleService{ private ArticleDao articleDao; public ArticleDao getArticleDao() { return articleDao; } @Resource public void setArticleDao(ArticleDao articleDao) { this.articleDao = articleDao; } @Override public void addArticle(Article article) { articleDao.addArticle(article); } @Override public void delArticle(Article article) { articleDao.delArticle(article); } @Override public void getArticle() { articleDao.getArticle(); } }
AuthorityInterceptor
package com.vti.aop; import javax.annotation.Resource; import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; import org.springframework.stereotype.Component; import com.vti.proxy.UserProxy; @Component(value="authority") public class AuthorityInterceptor implements MethodInterceptor{ private UserProxy proxy; public UserProxy getProxy() { return proxy; } @Resource public void setProxy(UserProxy proxy) { this.proxy = proxy; } @Override public Object invoke(MethodInvocation invocation) throws Throwable { String methodName = invocation.getMethod().getName(); int authority=proxy.getUser().getAuthority(); if (authority==1){//普通用户 if (methodName.equals("getArticle")) { return invocation.proceed(); }else { System.out.println("无权限"); return null; } }else if (authority==2){//发布用户 if (methodName.equals("getArticle")) { return invocation.proceed(); }else if (methodName.equals("addArticle")) { return invocation.proceed(); }else { System.out.println("无权限"); return null; } }else { //管理用户 return invocation.proceed(); } } }
UserProxy
package com.vti.proxy; import javax.annotation.Resource; import org.springframework.stereotype.Component; import com.vti.model.Article; import com.vti.model.User; import com.vti.service.ArticleService; @Component(value="proxy") public class UserProxy{ private User user; private ArticleService articleService; public ArticleService getArticleService() { return articleService; } @Resource public void setArticleService(ArticleService articleService) { this.articleService = articleService; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } public void add() { Article article=new Article(); articleService.addArticle(article); } public void del() { Article article=new Article(); articleService.delArticle(article); } public void read() { articleService.getArticle(); } }
Test
package com.vti.test; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.vti.model.User; import com.vti.proxy.UserProxy; public class AOPTest { public static void main(String[] args) { ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("beans.xml"); UserProxy proxy=context.getBean(UserProxy.class); User user=new User(); user.setAuthority(1); proxy.setUser(user); proxy.del(); } }
测试结果如下:
setAuthority=1,只能阅读
setAuthority=2,能添加也能阅读
setAuthority=3.,还能删除
大家自己测试,建议熟悉了SSH的人才来做这个。
相关推荐
Spring AOP(面向切面编程)是一个强大的工具,常用于实现业务逻辑中的横切关注点,如日志、事务管理以及我们的案例——数据权限控制。本篇将深入探讨如何结合Spring AOP和Oracle数据库来实现精细化的数据权限控制。...
Java Spring AOP 权限控制 Java Spring AOP 权限控制是指在 Java Spring 框架下使用 Aspect-Oriented Programming(面向方面编程)技术来实现权限控制。权限控制是指对用户的访问权限进行控制和管理,以确保系统的...
本实例将深入探讨如何在Spring AOP中实现权限控制,以提高代码的可读性和可维护性。 首先,我们要理解AOP的基本概念。AOP允许程序员定义“切面”,这些切面封装了特定的关注点,比如权限检查。然后,这些切面可以在...
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它允许我们在不修改源代码的情况下对程序的...这个简单的示例展示了如何利用Spring AOP进行权限控制,实际应用中,可以根据具体需求进行更复杂的定制和优化。
通过以上步骤,我们创建了一个基于Spring AOP的权限验证框架,实现了对用户权限的灵活控制。这种方式不仅简化了代码,提高了代码复用性,还使得权限验证策略可以根据需求轻松调整。在实际项目中,还可以结合Spring ...
- **权限控制**:在访问敏感资源前进行权限检查。 - **性能监控**:记录方法执行时间,分析系统性能瓶颈。 ### 6. 性能对比 JDK动态代理由于基于接口,对非接口类无法处理,而CGLIB则无此限制,但CGLIB的性能相对...
在这个"Spring Boot AOP权限控制模块开发"项目中,我们将深入探讨如何利用AOP来构建一个自定义的权限管理模块。 首先,AOP的核心概念是切面(Aspect)、通知(Advice)、连接点(Join Point)、切点(Pointcut)和...
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和抽象化的方法来处理系统中的交叉关注点,如日志、事务管理、安全性等。本学习笔记将深入探讨Spring AOP的核心概念、工作原理以及实际...
在Spring框架中,AOP(面向切面编程)是一种强大的工具,用于实现诸如日志记录、性能监控、事务管理以及,如题目所述,权限控制等跨功能关注点。本篇文章将深入探讨如何利用Spring AOP来实现权限管理,以及相关的...
Spring AOP,全称Aspect-Oriented Programming(面向切面编程),是Spring框架的重要组成部分,用于实现横...在实际开发中,它可以用于日志记录、权限控制、事务管理等多个场景,极大地提高了代码的可维护性和复用性。
3. **安全控制**:检查权限,防止未经授权的访问。 4. **日志记录**:记录操作信息,便于追踪和调试。 5. **缓存管理**:在方法调用前检查是否有缓存结果,避免重复计算。 6. **错误处理**:统一处理异常,提供...
4. 安全控制:在方法调用前检查权限。 总结起来,"spring-aop-jar"涉及了Spring框架中的面向切面编程模块,包括Spring AOP和AspectJ的集成。通过理解和熟练使用这些组件,开发者可以有效地解耦关注点,提高代码的可...
3. 安全控制:通过检查用户权限,阻止非法访问。 4. 性能监控:在方法执行前后记录耗时,用于性能分析。 总的来说,Spring AOP提供了一种优雅的方式来处理横切关注点,使得业务代码更专注于核心功能,提高了代码的...
- 安全控制:检查用户权限,确保只有授权用户才能访问特定资源。 - 性能监控:在关键方法周围添加计时器,以跟踪性能瓶颈。 - 事务管理:确保数据库操作在正确的情况下提交或回滚,无需在业务代码中显式处理。 6...
《Spring AOP:面向切面编程的深度解析》 在软件开发中,Spring框架以其强大的功能和灵活性,已经成为Java企业级应用的首选框架之一。其中,Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架...
Spring AOP,全称为Aspect Oriented Programming,是Spring框架中的一个重要模块,主要负责处理系统中的...文件"5.SpringAOP_01"和"6.SpringAOP_02"很可能是课程的分阶段内容,涵盖了从基础概念到进阶实践的详细讲解。
在Spring中,AOP主要用于实现日志记录、事务管理、权限控制等功能。 在描述中提到的问题,用户在尝试使用Spring AOP的注解`@Aspect`时遇到了没有提示的情况。这通常是因为缺少了相关的jar包依赖。Spring AOP的实现...
在提供的压缩包文件"springAOP"中,可能包含了以下内容: - **切面类(Aspect Class)**:包含切点和通知的Java类,可能使用了`@Aspect`注解。 - **目标类(Target Class)**:被AOP代理的对象,通常包含业务逻辑。...
- **安全控制**:权限检查,防止非法访问。 - **缓存管理**:在方法调用前检查缓存,避免不必要的数据库查询。 ### 5. 示例项目`SpringAopPrj`分析 这个项目很可能是包含了一个Spring AOP的实战例子,可能包含了...
8. **AOP应用场景**:Spring AOP广泛应用于日志记录、事务管理、权限控制、缓存管理等场景。通过切面可以将这些通用功能与业务逻辑解耦,提高代码的可维护性和可重用性。 总之,Spring AOP的默认代理方式是动态代理...