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();
}
}
符件帖上工程全图与工程包: