求助!关于j2ee安全框架问题?!!!

04-12-30 天龙工作室
在j2ee框架中如何实现可定制的安全验证及授权?

我想在我的系统中实现如下功能:

说明:此系统的客户端是使用java编写的界面,服务端采用Web Sevice实现业务逻辑,业务的实现主要采用EJB。

1、登录,用户在客户端通过输入用户名及密码进行登录,服务端根据登录的用户名及密码来判断是否登录成功!

2、方法调用,根据登录的用户信息,在数据库中取得该用户的权限(此权限何存在数据库中,管理员可对用户进行权限的修改),来判断此用户是否有此方法调用的权限。

3、权限设置,管理员可对用户进行权限设置。

我的分析:

a.用户登录后,在服务端的其它业务方法中如何实现权限验证?实现方式可以采用,将所以方法在一个状态bean中实现,用户登录后将用户信息进行保存,调用其它方法时可进行查询数据库得到其权限,此种方法的害处是每个客户端都必须使用一个状态bean,程序退出时该状态bean才死掉,如果客户比较多时,服务器将无法负载。

b.第二种实现方法,在每一个商务方法中加入用户信息,在调用商务方法时根据传入的参数(用户信息)查询数据库得到其权限,这种方法的缺点是会增加传输数据,且每个方法都带用户信息也不地道:)

c.第三种实现方法,使用jaas验证,服务端由部署员进行角色用户映射的部署,但这种方式无法动态的增加、删除、改变用户,授权也无法动态变更。

我的问题:

以上是我想到的实现方法,都有其致命的缺点,无法满足需求,请教各位大虾?谁有更好的方法,给出相应实例,我将不甚感激!!此问题困扰我很久了!!在此先谢过了!

天龙工作室
2004-12-30 15:18
这里的帖子如何修改啊???

对上面问题的补充:

主要是要实现在服务端中调用商务方法时根据用户权限进间判断,服务端不是采用jsp,所有商务方法都很机密,外界只有登录后才能访问相应的商务方法,因为系统中所有的商务方法都会以web sevices的方式暴露出来,恶意的客户端如果可以调用相应商务方法,系统就无安全可言了!

dabb
2004-12-30 15:22
你是台湾的吗?什么商务商务的,感觉怪怪的。台湾说什么程式什么的。

有状态session bean 属于重量级的,一般访问量比较大的系统不推荐使用,还是使用web端的session作为状态载体。

你为什么需要每次都去查询数据库?完全可以一次把功能项-角色对应的关系加载进内存(在系统启动时,因为这些东西通常很少变动),然后在用户登陆的时候,在session保留它的角色信息就行了。这样完全可以把权限验证这层东西独立出来。

至于jaas,我实在想不去它有什么用?一般的系统都需要用户自己能动态对角色对应的功能项进行操作的。

天龙工作室
2004-12-30 16:11
首先谢谢回复,你所说的我在分析中已经说过了,我采用的是b/s和c/s,session中保存用户信息只能在b/s中实现,而c/s就不行了,我所担心的不是在客户端得到登录用户的权限,而是在客户端调用业务方法时,服务端的安全,如果采用非状态session bean,它是无法在服务端保存用户信息的,要么就是把所有暴露的业务方法都放在此session bean 中,然后客户端始终使用这个session bean进行交互,这个方法可以实现安全,但我在分析中已经说了,它跟状态session bean就没什么区别了,服务器无法承载。

我把系统所有的业务方法都得暴露,如果其人再编写一个客户端调用这些业务方法,它不是一样可以得到信息,这样就无安全可言了。

axis里可插入自定义handler来实现过滤,它应该算一个不错的实现方案,但可惜它在weblogic tookit中不能通用。

采用加密或数字签名数据也算一个不错的选择,可是却无法实现授权和验证。

达到解决我提出的问题的方法有很多,但都不是很好,我只想通过交流能找出更好的解决方案。。谢谢!

Kidwish
2004-12-30 17:37
既然你觉得每个现有的方案都不能满足需求,那么,应该自己实现RBAC啊,好象也不是那么复杂(简单的足以满足你动态给用户角色分配功能访问权).再高级一点的可以使用axis的UDDI嘛...

我觉得你可以在WS层做个controller(handler?)来委派动能和认证.至于如何实现授权应该很容易...

dabb
2005-01-04 10:39
我没有看到你的下封帖子,理解有误了。

我觉的c/s应该也和b/s一样的,可以通过象session id 那样传递一个uuid来作为session id。如果没有记错的话,axis也是通过一个servlet来作为front controller,这样的话,我们可以自己修改这个servlet,截取请求,先做验证(如果真按你说的那样,axis的handler不能通用于所有应用服务器)。

我想主要要实现的问题域应该是类似于httpsession的机制吧,就是authenticate这一步,这应该也不难。我对ws没有什么深入的应用,不知道client能否在request url上附加参数?如果可以,那么在你的应用上如果是以http协议作为on-wire协议,能否直接利用http session的机制?

laodao
2005-01-06 11:01
在J2EE系统中的认证就没有什么好说的,随便你采用什么方案都可以,但是如果要采用JAAS来授权那么就必须采用JAAS的认证。

对于授权可能就要仔细考虑了,JAAS很好,但是很多人说它不实用,可能是它用起来比较麻烦。

我提几点:

- 最好能在部署应用前能确定你有多少个角色。我们是针对角色授权而不是用户。这样就不会存在你所谓的动态改动权限表的问题。

- JAAS的策略文件是可以动态改的,你也可以将它写到DBMS中的或其他任何可访问的存储设备中。但是你需要重写它的策略解析引擎。

- JAAS的授权不并同于你现有的概念。它由一大组API和对象支持,绝对是很完整的,应该是可以满足JAVA平台的任何授权请求的。

- 采用JAAS来构造J2EE应用的安全框架最好是在应用开发前就确定采用,而后改有点麻烦。

附:我们专门做JAAS的咨询,你有需求的话可以找我:QQ 28245337

zhyiwww
2005-08-31 18:53
我在form里提交一个request到服务器,那么怎么保证此数据在网络传输中的安全??

在服务器端怎么样保证数据的安全??请指教,谢谢!!

banq
2005-09-01 10:50
使用SSL啊 或第三方签名。

猜你喜欢