下午上网的时候看到jad,以前曾经看到过这个,据说是速度非常快的java反编译器,这一段正好在用一个代码生成插件Modelstry,有一个文件命名部分不符合java规范的bug,但没有代码也不好改,一直想自己修改一下,就下载来看看咯
花了一些时间,执行 jad -o -r -sjava -dsrc Modelstry/**/*.class,反编译了modelstry.jar,再自己重建成eclipse的工程,呵呵,反编译的效果真的超强的, 只有一类几乎一样的错误,但是很容易就改好了,再重新打包成jar,放到plugin目录下,经过几次调试,哈哈,原来郁闷了我很久的变量命名问题,终于自己动手搞定了,庆祝一下;-P
在四月的最后一天,网上报名好了,我们的Accelerate SOA今后开始全力运作啦!
soa in action,our accelerate SOA!!
权限模型
把权限模型划分为页面访问控制权限和数据权限
(
商业逻辑权限
)
。其中,页面访问控制权限主要在于控制页面是否可以被访问,比如,管理员可以访问权限设置页面。数据权限主要是指是否有操作某个数据的权限,比如说组织机构中的部分问题,一个部门应该只看到本部门的数据,这就是数据权限,这个应该在业务逻辑中控制,而不是页面中。
本权限模型专注于页面访问控制,不涉及数据操作权限。使用用户、角色、资源和操作来控制实际的页面访问。同时,区别于一般的页面权限模型,本模型采用细粒度的权限控制,可以控制到页面的具体操作,很不是整个页面不加区分。所以,这样就可以在一个页面放置多个操作,方便于用户,同时又不失安全性。
考虑到权限在实际中很少变动,使用数据库的冗余设计,还有数据缓存等来提高效率。
用户:
User
Id
、
name
用户角色表(
1
对多):
Id
、
userID
、
roleID
角色
: Role
Id
、
name
、
description
、
defaultPage
(系统初始化时,使用的登陆页?)
权限
(Role-Resource-Operation)
:
Authority
Id
、
role
、
resource
、
resourceURL
(为效率考虑采用的冗余,等同
Resource
中的
url
,在实际验证中将使用该
url
来验证)、
operationID
、
operationName
(为效率考虑,采用冗余,等同
Operation
中的
name
,实际验证中使用该操作名称来做验证)
资源:
Resource
Id
、
name
、
description
、
url
操作:
Operation
Id
、
name(
一般应改为英文,对应方法的名字
)
、
description
BaseAction
中应该有一个
getMethodAuthMap
(),得到方法和可用操作的映射。如果映射中找不到,则直接使用该方法名当作操作名称。如果方法映射找到了,但是为空,这意味着该方法对于任何用户都是可以访问的,不要求验证。子类可以继承和覆盖该方法,来实现特殊的权限逻辑。
权限操作应该允许复制已有的权限来生成新的权限。
在前端控制器中设置已有的对于某个资源的操作,放到
hashtable
中,比如
auth
。对于页面,使用表达式语言
EL
来限制实际的逻辑,比如如下要求对于当前页面要有
delete
权限:
<c:if test=”auth.delete”>
</c:if>
同时,在整体页面中,使用
struts
的
dispathAction
来做分发,
url
形如
url?method=delete
在执行该方法之前,首先检查当前页面的这个权限
delete
,如果可以,则导向到正确的页面,否则导向到
accessDenied.do
页面(注意,该页面比较特殊,对于任何用户都应该是可以访问的,也就是前面的
getMethodAuthMap
返回为
NULL
)
以前一直没有弄明白
jaas
如何配置,看了
jaoso
这个论坛的源码,还有这个http://www.linuxaid.com.cn/forum/showdoc.jsp?l=1&i=53549上面的代码等等,以为一定要在
<
jre_home
>
/lib/security
/
java.security
文件中配置,就很疑惑这样不是很受限制么,刚刚看了
JAAS:
灵活的
Java
安全机制
总算搞清楚了,可以通过配置系统属性
java.security.auth.login.config
来指定
jaas
模块的配置文件
配置文件可以被任意命名,并且可以被放在任何位置。
JAAS
框架通过使用
java.securty.auth.long.config
属性来确定配置文件的位置。例如当你的应用程序是
JaasTest
,配置文件是当前目录下的
jaas.config
,你需要在命令行中输入:
java -Djava.security.auth.login.config=jass.config JavaTest
不过这样还是比较麻烦,看jetspeed2源码的时候,发现比较好的一个方法
System.setProperty("java.security.auth.login.config", loginConfigUrl.toString());
这样,配置文件就可以直接在程序中指定了,当移植到部署环境中,就不用再自己配置一遍了