首先定义一个用户:
- public class User {
- private String username;
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- }
用户有三种人:未注册用户,注册用户,与管理员
注册用户可以可以发表,回复帖子
管理员除了可以发表,回复帖子,还可以删除帖子!
下面定义TestCommunity接口:
- public interface TestCommunity {
- public void answerTopic();
- public void deleteTopic();
- }
实现上面接口的TestCommunityImpl类:
- public class TestCommunityImpl implements TestCommunity {
- //注册用户与管理员拥有的功能
- public void answerTopic() {
- System.out.println(“可以发表,回复帖子”);
- }
- //管理员拥有的功能
- public void deleteTopic() {
- System.out.println(“可以删除帖子!”);
- }
- }
下一步,建立一下依赖注入的实现类TestResultImpl:
- public class TestResultImpl {
- private TestCommunity test;
- public void setTest(TestCommunity test) {
- this.test = test;
- }
- public void answerTopic()
- {
- test.answerTopic();
- }
- public void deleteTopic()
- {
- test.deleteTopic();
- }
- }
接下来,就是最重要的一个类,拦截器,Around处理类型的,类TestAuthorityInterceptor:
- import org.aopalliance.intercept.MethodInterceptor;
- import org.aopalliance.intercept.MethodInvocation;
- //创建Around处理应该实现MethodInterceptor接口
- public class TestAuthorityInterceptor implements MethodInterceptor {
- private User user;
- public User getUser() {
- return user;
- }
- public void setUser(User user) {
- this.user = user;
- }
- // invoke方法返回调用的结果
- public Object invoke(MethodInvocation invocation) throws Throwable {
- String methodName = invocation.getMethod().getName();
- if (user.getUsername().equals(“unRegistedUser”)) {
- System.out.println(“你的身份是未注册用户,没有权限回复,删除帖子!”);
- return null;
- }
- if ((user.getUsername().equals(“user”))
- && (methodName.equals(“deleteTopic”))) {
- System.out.println(“你的身份是注册用户,没有权限删除帖子”);
- return null;
- }
- // proceed()方法对连接点的整个拦截器链起作用,拦截器链中的每个拦截器都执行该方法,并返回它的返回值
- return invocation.proceed();
- }
- }
配置文件:
- <?xml version=“1.0” encoding=“UTF-8”?>
- <!DOCTYPE beans PUBLIC “-//SPRING//DTD BEAN//EN” “http://www.springframework.org/dtd/spring-beans.dtd”>
- <beans>
- <bean id=“authTarget” class=“org.test.lighter.TestCommunityImpl” />
- <!– 其中的username可以写为admin,user,和unRegistedUser –>
- <bean id=“user” class=“org.test.lighter.User”>
- <property name=“username” value=“user” />
- </bean>
- <!– 配置拦截器 –>
- <bean id=“TestAuthorityInterceptor”
- class=“org.test.lighter.TestAuthorityInterceptor”>
- <property name=“user” ref=“user” />
- </bean>
- <!– 配置代理工厂bean –>
- <bean id=“service”
- class=“org.springframework.aop.framework.ProxyFactoryBean”>
- <property name=“proxyInterfaces”>
- <value>org.test.lighter.TestCommunity</value>
- </property>
- <property name=“target” ref=“authTarget”/>
- <property name=“interceptorNames”>
- <list>
- <value>TestAuthorityInterceptor</value>
- </list>
- </property>
- </bean>
- <bean id=“testResult” class=“org.test.lighter.TestResultImpl”>
- <property name=“test” ref=“service” />
- </bean>
- </beans>
再写一个执行文件BeanTest:
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.FileSystemXmlApplicationContext;
- public class BeanTest {
- public static void main(String[] args) throws Exception
- {
- ApplicationContext ctx = new FileSystemXmlApplicationContext(“src/bean.xml”);
- TestResultImpl test = (TestResultImpl)ctx.getBean(“testResult”);
- test.answerTopic();
- test.deleteTopic();
- }
- }
执行结果:大家猜一下啦
- 1、如果是管理员,打印出:
- 可以发表,回复帖子
- 可以删除帖子!
- 2、如果是注册用户:
- 可以发表,回复帖子
- 你的身份是注册用户,没有权限删除帖子
- 3、未注册用户:
- 你的身份是未注册用户,没有权限回复,删除帖子!
版权声明:本文为u010167086原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。