spring aop权限小实例

1.首先写一个User实例类,在程序中我们以个实体类userName属性来判断当前用户的权限:

package org.pan.bean;

public class User {
	
	private String userName;

	public String getUserName() {
		return userName;
	}
	
	public void setUserName(String userName) {
		this.userName = userName;
	}

}

 2.定义一个业务接口TestCommunity;

package org.pan.bean.dao;

public interface TestCommunity {
	
	public void answerTopic();
	
	public void deleteTopic();

}

 

3.实例上面这个接口的服务:

package org.pan.bean.dao.impl;

import org.pan.bean.dao.TestCommunity;

public class TestCommunityImpl implements TestCommunity{

	@Override
	public void answerTopic() {
		System.out.println("可以发表,回复帖子");
		
	}

	@Override
	public void deleteTopic() {
		System.out.println("可以删除帖子");
		
	}

}

 4.定义一个拦截器类,这个类将拦截上面接口中的方法,并判断当前User是否有权限调用接口中的方法:

package org.pan.interceptor;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.pan.bean.User;

public class TestAuthorityInterceptor implements MethodInterceptor{

	private User user;
	public void setUser(User user) {
		this.user = user;
	}
	@Override
	public Object invoke(MethodInvocation methodInvocation) throws Throwable {
		String methodName=methodInvocation.getMethod().getName();
		if(user.getUserName().equals("unRegisterUser")){
			System.out.println("你现在还没有登陆,没有权限回复帖子,删除帖子");
			return null;
		}
		if(user.getUserName().equals("user")&&methodName.equals("deleteTopic")){
			System.out.println("您的身份是注册用户,没有权限删除帖子");
			return null;
		}
		return methodInvocation.proceed();
	}

}

 5.spring配置文件内容:

<?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:p="http://www.springframework.org/schema/p"
	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-2.5.xsd
    http://www.springframework.org/schema/aop 
    http://www.springframework.org/schema/aop/spring-aop-2.5.xsd 
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd ">
    
	<bean id="testCommunity" class="org.pan.bean.dao.impl.TestCommunityImpl" />
	
	<bean name="user" class="org.pan.bean.User">
		<property name="userName" value="user" />
	</bean>
	
	<bean id="testAuthorityInterceptor" class="org.pan.interceptor.TestAuthorityInterceptor">
		<property name="user" ref="user" />
	</bean>
	
	<bean name="proxyAop" class="org.springframework.aop.framework.ProxyFactoryBean">
		<property name="target" ref="testCommunity" />
		<property name="interceptorNames">
			<list>
				<value>testAuthorityInterceptor</value>
			</list>
		</property>
	</bean>
	
</beans>

 6.大功告成,来个testMain测试类了:

package org.pan.test;

import org.pan.bean.dao.TestCommunity;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class testMain {
	public static void main(String[] args) {
		ApplicationContext ctx = new ClassPathXmlApplicationContext(
				"applicationContext.xml");
		TestCommunity testCommunity = (TestCommunity) ctx.getBean("proxyAop");
		testCommunity.answerTopic();
		testCommunity.deleteTopic();
	}
}

 

符件帖上工程全图与工程包:

 

你可能感兴趣的:(spring,AOP,Interceptor)