当柳上原的风吹向天际的时候...
真正的快乐来源于创造
BlogJava
::
首页
::
联系
::
聚合
::
管理
368 Posts :: 1 Stories :: 201 Comments :: 0 Trackbacks
公告
常用链接
我的随笔
我的文章
我的评论
我的参与
最新评论
留言簿
(3)
给我留言
查看公开留言
查看私人留言
随笔分类
Algorithm
C/C++/VC(2)
CSS(8)
DB(10)
Dojo(1)
HTML(2)
IIS(1)
Java(12)
JavaScript(15)
RSA(8)
Server(3)
SQL(2)
Teambiz(15)
WMB(21)
相册
8thCisis
SqlToolBox
相册一
个人常用链接
51CTO
Box网络上传下载
CSDN
IP地址手机号查询
VOA English
VVG的前端设计
前端设计师聂微东
多特软件站
大连停水信息
大连建设网
常用Jar包对照表
常用网址总汇
招商银行
站长站图标下载
绿软发布页
网页模板下载
网页模板之家(65)
最新随笔
1. 此博停止更新
2. 给DB2增加删除字段二三事
3. 连接到DB2数据库并向其中导入数据
4. ZT:DB2 SQL 消息(3000-6999)
5. DB21061E 未初始化命令行环境的解决
6. DB2无法在Win7上安装的解决
7. ZT:SQL4414N “DB2 管理服务器”处于不活动状态 的处理
8. 如何处理DB2JAVIT:RC=9505问题
9. T410不能换上1600的DDr3内存
10. WIN7中让任务栏项目别合并
积分与排名
积分 - 390524
排名 - 145
最新评论
1. re: 使用MD5对存放在数据库中用户密码进行保护[未登录]
请问一下你那个service.hasSameName(name) 里面的service 是哪里得到的?
--Dr
2. re: 在页面打开SWF文件的代码
dsd
--ss
3. re: 使用BarCode4j生成条形码和二维码的例程
zzzz
--zzz
4. re: 对用户密码进行加盐处理
老问题了,偶然间看到这个问题。为了不误导别人希望提醒下后来者,加盐不要用用户名。用户名同样是可见的太容易逆推了,而且用户名一变密码就不行了。
--路人
5. re: 在网络通讯中采用混合方式对信息进行加密
你给的那个程序 代码链接 打不开了
是不是 失效了 能不能再给个
--#123
阅读排行榜
1. 用Wireshark从http数据包中得到用户的登录信息(52837)
2. 对用户密码进行加盐处理(11786)
3. 使用RSA进行信息加密解密的WebService示例(11020)
4. 实现子Div在父Div中水平居中的一种方法(10261)
5. Spring在Web应用中的配置(8627)
在简单值权限系统中使用Annotation替代了原来处于XML中的值设置
首先定义一个Annotation
package
com.heyang.anno;
import
java.lang.annotation.ElementType;
import
java.lang.annotation.Retention;
import
java.lang.annotation.RetentionPolicy;
import
java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public
@
interface
PrivilegeFor
{
int
value()
default
0
;
}
其次在接口IDocService中使用这个Annotation设定执行方法所需要的权限值:
package
com.heyang.service;
import
com.heyang.anno.PrivilegeFor;
import
com.heyang.domain.Doc;
import
com.heyang.domain.User;
/** */
/**
* DocService需要实现的接口
*
@author
何杨(heyang78@gmail.com)
*
*
@since
2008-12-30 下午05:16:17
*
@version
1.00
*/
public
interface
IDocService
{
/** */
/**
* 用户user添加一个文档doc
*
@param
doc
*
@param
user
*/
@PrivilegeFor(value
=
20
)
public
void
add(Doc doc,User user);
/** */
/**
* 用户user删除一个文档doc
*
@param
doc
*
@param
user
*/
@PrivilegeFor(
60
)
public
void
delete(Doc doc,User user);
/** */
/**
* 用户user更新一个文档doc
*
@param
doc
*
@param
user
*/
@PrivilegeFor(value
=
40
)
public
void
update(Doc doc,User user);
}
其三,在前置通知权限控制类中通过Annotation反射API得到方法需要的权限值,再根据用户的权限值进行权限判定,不满足则抛出异常,这样权限不足的用户将无法访问DocService的相应方法。
package
com.heyang.service;
import
java.lang.reflect.Method;
import
org.springframework.aop.MethodBeforeAdvice;
import
com.heyang.anno.PrivilegeFor;
import
com.heyang.domain.User;
import
com.heyang.exception.PrivilegeNotEnoughException;
/** */
/**
* 实现权限子系统
*
@author
: 何杨(heyang78@gmail.com)
* @date: 2009-1-2-下午04:19:13
*/
public
class
PrivilegeService
implements
MethodBeforeAdvice
{
/** */
/**
* 在IDocService的实际方法开始前进行前置处理--权限检查
*/
public
void
before(Method arg0, Object[] arg1, Object arg2)
throws
Throwable
{
//
取得方法名
String mothodName
=
arg0.getName();
//
取得方法的标注
PrivilegeFor privilegeFor
=
arg0.getAnnotation(PrivilegeFor.
class
);
if
(privilegeFor
!=
null
)
{
//
取得标注的值(即执行方法所需要的权限)
int
value
=
privilegeFor.value();
//
取得用户权限
User user
=
(User)arg1[
1
];
int
userPrivilegeValue
=
user.getPrivilegePoint();
//
权限判断
if
(userPrivilegeValue
<=
value)
{
throw
new
PrivilegeNotEnoughException(
"
用户权限必须达到
"
+
value
+
"
才能执行
"
+
mothodName
+
"
操作
"
);
}
}
}
}
最后的结果和XML设置的方案是一致的。
示例执行代码如下:
ApplicationContext ctx
=
new
ClassPathXmlApplicationContext(
"
context.xml
"
);
IDocService docService
=
(IDocService)ctx.getBean(
"
docServiceProxy
"
);
Doc doc
=
new
Doc(
"
论美国次贷危机的产生及影响
"
);
User user
=
new
User(
"
中科院经济所研究员郭德纲
"
,
50
);
//
用户向系统添加文章
try
{
docService.add(doc, user);
}
catch
(PrivilegeNotEnoughException ex)
{
System.out.println(ex.getMessage());
}
//
用户向系统更新文章
try
{
doc.setName(
"
论美国次贷危机的产生及影响和我国应该采取的应对措施
"
);
docService.update(doc, user);
}
catch
(PrivilegeNotEnoughException ex)
{
System.out.println(ex.getMessage());
}
//
用户从系统撒删除文章
try
{
docService.delete(doc, user);
}
catch
(PrivilegeNotEnoughException ex)
{
System.out.println(ex.getMessage());
}
}
执行效果
:
将文件 名
=
论美国次贷危机的产生及影响交由dao处理(存入数据库)
将文件 名
=
论美国次贷危机的产生及影响和我国应该采取的应对措施交由dao处理(更新数据库中对应的记录)
用户权限必须达到60才能执行delete操作
代码下载
:
http://www.blogjava.net/Files/heyang/PrivilegeAnnotation20090106155940.rar
http://www.blogjava.net/Files/heyang/PrivilegeAnnotation220090108213912.rar
需要自行载入的包
为:
commons-logging-1.0.4.jar,log4j-1.2.14.jar,spring.jar,mysql-connector-java-5.0.6-bin.jar
posted on 2009-01-06 15:59
何杨
阅读(470)
评论(0)
编辑
收藏
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
Copyright @ 何杨
Powered by:
.Text
and
ASP.NET
Theme by:
.NET Monster