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