`
__SuRa丶Rain
  • 浏览: 45001 次
  • 性别: Icon_minigender_1
  • 来自: 火星
社区版块
存档分类
最新评论

Spring AOP控制权限

阅读更多

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的人才来做这个。

 

 

分享到:
评论

相关推荐

    使用SpringAop使用Oracle数据权限控制

    Spring AOP(面向切面编程)是一个强大的工具,常用于实现业务逻辑中的横切关注点,如日志、事务管理以及我们的案例——数据权限控制。本篇将深入探讨如何结合Spring AOP和Oracle数据库来实现精细化的数据权限控制。...

    java spring AOP权限控制

    Java Spring AOP 权限控制 Java Spring AOP 权限控制是指在 Java Spring 框架下使用 Aspect-Oriented Programming(面向方面编程)技术来实现权限控制。权限控制是指对用户的访问权限进行控制和管理,以确保系统的...

    spring aop权限小实例

    本实例将深入探讨如何在Spring AOP中实现权限控制,以提高代码的可读性和可维护性。 首先,我们要理解AOP的基本概念。AOP允许程序员定义“切面”,这些切面封装了特定的关注点,比如权限检查。然后,这些切面可以在...

    spring aop 实现权限的简单示例

    Spring AOP(面向切面编程)是Spring框架的重要组成部分,它允许我们在不修改源代码的情况下对程序的...这个简单的示例展示了如何利用Spring AOP进行权限控制,实际应用中,可以根据具体需求进行更复杂的定制和优化。

    Java之Spring AOP 实现用户权限验证

    通过以上步骤,我们创建了一个基于Spring AOP的权限验证框架,实现了对用户权限的灵活控制。这种方式不仅简化了代码,提高了代码复用性,还使得权限验证策略可以根据需求轻松调整。在实际项目中,还可以结合Spring ...

    Spring AOP实现机制

    - **权限控制**:在访问敏感资源前进行权限检查。 - **性能监控**:记录方法执行时间,分析系统性能瓶颈。 ### 6. 性能对比 JDK动态代理由于基于接口,对非接口类无法处理,而CGLIB则无此限制,但CGLIB的性能相对...

    Spring Boot AOP权限控制模块开发

    在这个"Spring Boot AOP权限控制模块开发"项目中,我们将深入探讨如何利用AOP来构建一个自定义的权限管理模块。 首先,AOP的核心概念是切面(Aspect)、通知(Advice)、连接点(Join Point)、切点(Pointcut)和...

    spring aop 学习笔记

    Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和抽象化的方法来处理系统中的交叉关注点,如日志、事务管理、安全性等。本学习笔记将深入探讨Spring AOP的核心概念、工作原理以及实际...

    Spring AOP 权限

    在Spring框架中,AOP(面向切面编程)是一种强大的工具,用于实现诸如日志记录、性能监控、事务管理以及,如题目所述,权限控制等跨功能关注点。本篇文章将深入探讨如何利用Spring AOP来实现权限管理,以及相关的...

    spring aop spring aop

    Spring AOP,全称Aspect-Oriented Programming(面向切面编程),是Spring框架的重要组成部分,用于实现横...在实际开发中,它可以用于日志记录、权限控制、事务管理等多个场景,极大地提高了代码的可维护性和复用性。

    Spring AOP简单demo

    3. **安全控制**:检查权限,防止未经授权的访问。 4. **日志记录**:记录操作信息,便于追踪和调试。 5. **缓存管理**:在方法调用前检查是否有缓存结果,避免重复计算。 6. **错误处理**:统一处理异常,提供...

    spring-aop-jar

    4. 安全控制:在方法调用前检查权限。 总结起来,"spring-aop-jar"涉及了Spring框架中的面向切面编程模块,包括Spring AOP和AspectJ的集成。通过理解和熟练使用这些组件,开发者可以有效地解耦关注点,提高代码的可...

    spring AOP的运用

    3. 安全控制:通过检查用户权限,阻止非法访问。 4. 性能监控:在方法执行前后记录耗时,用于性能分析。 总的来说,Spring AOP提供了一种优雅的方式来处理横切关注点,使得业务代码更专注于核心功能,提高了代码的...

    spring aop所需jar包

    - 安全控制:检查用户权限,确保只有授权用户才能访问特定资源。 - 性能监控:在关键方法周围添加计时器,以跟踪性能瓶颈。 - 事务管理:确保数据库操作在正确的情况下提交或回滚,无需在业务代码中显式处理。 6...

    SpringAOP.rar_springAOP

    《Spring AOP:面向切面编程的深度解析》 在软件开发中,Spring框架以其强大的功能和灵活性,已经成为Java企业级应用的首选框架之一。其中,Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架...

    SpringAOP.zip

    Spring AOP,全称为Aspect Oriented Programming,是Spring框架中的一个重要模块,主要负责处理系统中的...文件"5.SpringAOP_01"和"6.SpringAOP_02"很可能是课程的分阶段内容,涵盖了从基础概念到进阶实践的详细讲解。

    spring aop 依赖jar

    在Spring中,AOP主要用于实现日志记录、事务管理、权限控制等功能。 在描述中提到的问题,用户在尝试使用Spring AOP的注解`@Aspect`时遇到了没有提示的情况。这通常是因为缺少了相关的jar包依赖。Spring AOP的实现...

    spring aop 附带测试实例

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

    Spring Aop使用实例

    - **安全控制**:权限检查,防止非法访问。 - **缓存管理**:在方法调用前检查缓存,避免不必要的数据库查询。 ### 5. 示例项目`SpringAopPrj`分析 这个项目很可能是包含了一个Spring AOP的实战例子,可能包含了...

    springAop默认代理方式.zip

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

Global site tag (gtag.js) - Google Analytics