| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 7829 人关注过本帖
标题:[原创][分享]利用Spring中的AOP做权限管理
只看楼主 加入收藏
支离破碎
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:737
专家分:0
注 册:2007-1-4
收藏
 问题点数:0 回复次数:12 
[原创][分享]利用Spring中的AOP做权限管理

AOP在Spring中占有很重要的地位,做了一个例子是利用AOP来做一个登陆的身份验证。。希望能对大家有所帮助,使用了AOP可以在不破坏你的代码的前提下帮你完成验证功能。。

转一点AOP的知识:

[CODE]
1、Spring只支持方法拦截,也就是说,只能在方法的前后进行拦截,而不能在属性前后进行拦截。
2、Spring支持四种拦截类型:目标方法调用前(before),目标方法调用后(after),目标方法调用前后(around),以及目标方法抛出异常(throw)。
3、前置拦截的类必须实现MethodBeforeAdvice接口,实现其中的before方法。
4、后置拦截的类必须实现AfterReturningAdvice接口,实现其中的afterReturning方法。
5、前后拦截的类必须实现MethodInterceptor接口,实现其中的invoke方法。前后拦截是唯一可以控制目标方法是否被真正调用的拦截类型,也可以控制返回对象。而前置拦截或后置拦截不能控制,它们不能印象目标方法的调用和返回。
[/CODE]

以上可以看出我们要选用实现MethodInterceptor接口的方法来完成这个功能。

[此贴子已经被作者于2007-6-5 17:01:56编辑过]

搜索更多相关主题的帖子: Spring AOP 权限 管理 分享 
2007-06-05 17:01
支离破碎
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:737
专家分:0
注 册:2007-1-4
收藏
得分:0 

-----------------------------------------------------------------------------------------------------

代码如下:

接口类的定义:

[CODE]
package com.dragon.study;

public interface ILogin {
public void login(String name);
}
[/CODE]

接口实现类的定义:

[CODE]
package com.dragon.study.Impl;

import com.dragon.study.ILogin;

public class LoginImpl implements ILogin {
/**
* Login
*/
public void login(String name) {
System.out.println("欢迎 " + name + "登陆!");
}
}
[/CODE]

最重要的拦截器的定义:

[CODE]
package com.dragon.Advice;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;

public class LoginInterceptor implements MethodInterceptor {
/**
* Interceptor
*/
public Object invoke(MethodInvocation arg0) throws Throwable {
String name = (String)arg0.getArguments()[0];
if (name.equals("flash")) {
System.out.println("这才是真正的用户! ");
return arg0.proceed();
} else {
System.out.println("非法的用户~~~ ");
return null;
}
}
}
[/CODE]

[此贴子已经被作者于2007-6-5 17:02:56编辑过]


人生漂泊無依,有如浮萍菱花,隨水飄流,你会在我这里停留吗?
[url=http://51mynet.]http://51mynet.[/url]
2007-06-05 17:02
支离破碎
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:737
专家分:0
注 册:2007-1-4
收藏
得分:0 

ApplicationContext.xml的定义:

<beans>
<bean id="loginInterceptor" class="com.dragon.Advice.LoginInterceptor"></bean>
<bean id="loginTarget" class="com.dragon.study.Impl.LoginImpl"></bean>
<bean id="login" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
<value>com.dragon.study.ILogin</value>
</property>
<property name="interceptorNames">
<list>
<value>loginInterceptor</value>
</list>
</property>
<property name="target">
<ref bean="loginTarget"/>
</property>
</bean>
</beans>



OK,以上就是所有代码,下面做一个测试类:

Test类定义:

[CODE]
package com;

import java.io.*;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

import com.dragon.study.ILogin;

public class Test {
public static void main(String[] args) throws IOException {
ApplicationContext ctx = new FileSystemXmlApplicationContext("applicationContext.xml");
ILogin login = (ILogin)ctx.getBean("login");
login.login("flash"); //用户为flash是正确用户,否则是错误的
}
}
[/CODE]



[此贴子已经被作者于2007-6-5 17:05:04编辑过]


人生漂泊無依,有如浮萍菱花,隨水飄流,你会在我这里停留吗?
[url=http://51mynet.]http://51mynet.[/url]
2007-06-05 17:03
黄袖标
Rank: 4
等 级:贵宾
威 望:13
帖 子:676
专家分:0
注 册:2007-3-22
收藏
得分:0 

恩,了解了,其实就是利用的切面来实现了验证,切面这种非侵入式的东西真的不错,可以透明的实现某些逻辑


我胡汉三又回来啦!物是人非啊,只有静夜思大大还在。
2007-06-05 17:05
支离破碎
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:737
专家分:0
注 册:2007-1-4
收藏
得分:0 
论坛怎么不让帖XML文件。。。。只好把XML的头文件删了

人生漂泊無依,有如浮萍菱花,隨水飄流,你会在我这里停留吗?
[url=http://51mynet.]http://51mynet.[/url]
2007-06-05 17:06
黄袖标
Rank: 4
等 级:贵宾
威 望:13
帖 子:676
专家分:0
注 册:2007-3-22
收藏
得分:0 
没事哦,那东西自己加好了,不过用的时候不加还真不行,我第一次就吃过这样的亏,找了半天没找到原因,后来把dtd定义补上就可以了  

我胡汉三又回来啦!物是人非啊,只有静夜思大大还在。
2007-06-05 17:10
想你的天空
Rank: 2
等 级:新手上路
威 望:5
帖 子:610
专家分:0
注 册:2004-12-30
收藏
得分:0 

好贴, 加精阿。
一般的书上会有的


2007-06-05 18:48
想你的天空
Rank: 2
等 级:新手上路
威 望:5
帖 子:610
专家分:0
注 册:2004-12-30
收藏
得分:0 
支离破碎的QQ多少?   加你QQ详细探讨

2007-06-05 18:52
支离破碎
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:737
专家分:0
注 册:2007-1-4
收藏
得分:0 
QQ基本上不了,只有MSN:flash7758@hotmail.com

自己给自己加精.....不太好呵,只是给说一个例子,到时候做权限的时候多一种选择.记得我第一个项目就是用的AOP做的权限,到今天我才体会到..

人生漂泊無依,有如浮萍菱花,隨水飄流,你会在我这里停留吗?
[url=http://51mynet.]http://51mynet.[/url]
2007-06-05 21:39
黄袖标
Rank: 4
等 级:贵宾
威 望:13
帖 子:676
专家分:0
注 册:2007-3-22
收藏
得分:0 
呵呵,我当初在一个小bbs当bz的时候经常给自己加精置顶加颜色各种的...  

我胡汉三又回来啦!物是人非啊,只有静夜思大大还在。
2007-06-06 09:32
快速回复:[原创][分享]利用Spring中的AOP做权限管理
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016098 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved