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

猜你喜欢

转载自vti-iteye.iteye.com/blog/1772771