什么是ralasafe呢,这里摘抄ralasafe-cookbook的引子:
Ralasafe访问控制中间件(数据级权限管理),是MIT协议开源免费软件产品。它使用图形
化方式处理各种数据级权限管理问题,包括数据库行列级、字段内容级权限问题;它还能处
理登录控制、功能级权限控制和URL权限认证。
使用Ralasafe,可以做到
1. 权限与业务解耦合——实践更清晰的系统架构
2. 权限管理完全图形化管理,不需要写一行代码或XML文件(基本配置信息除外,如
数据源和用户元数据)——实践高效开发
3. 所有访问控制被集中、规范化管理——实践访问模式的统一,减少安全漏洞
Ralasafe完全遵循JAVA EE规范,跨平台、web服务器和主流数据库。
如果想深入了解的话可以进入http://www.ralasafe.cn/社区进行研究讨论。我在这里来说说我在项目中集成ralasafe遇到的一些问题,供大家参考,避免大家走更多的弯路。
其实我是怀着激动的心情把ralasafe的Ralasafe_Cookbook、Ralasafe_dev_practice、Ralasafe_Configuration三本pdf看完了,因为现在还没有真正的第三方项目能真正的把业务和权限相分离,如果项目用Spring Security的话又感觉笨重、维护繁琐(只是个人意见)。
我看ralasafe的三大pdf是仔细看了3遍后才进行整合的,在整合前我还事先按文档把demo配置了一遍,确保没有问题后在我的项目中进行整合。
首先概要的说明下我们项目的主要应用框架是s2sh,数据库为db2,由于ralasafe官方没有给出db2的CREATE TABLE SQL,所以我把我集成的语句贴出来:
CREATE
TABLE ralasafe_sequence
(
currentValue INTEGER,
name VARCHAR(100) NOT NULL,
PRIMARY KEY (name)
)
CREATE TABLE usertype (
name varchar(100) NOT NULL,
description varchar(500) default NULL,
userMetadataXML varchar(4000) default NULL,
PRIMARY KEY (name)
)
CREATE TABLE application (
name varchar(100) NOT NULL,
description varchar(500) default NULL,
PRIMARY KEY (name)
)
CREATE TABLE applicationusertype (
appName varchar(100) NOT NULL,
userTypeName varchar(100) NOT NULL,
userMetadataStr varchar(1000) default NULL,
PRIMARY KEY (appName,userTypeName)
)
这四张表是ralasafe的权限的基础表
下面这个是依据我项目里创建的用户元数据所对应的视图,大家不明白可以去ralasafe的相关文档,这里就不赘述了
CREATE OR REPLACE VIEW USERVIEW AS
SELECT
u.ID,
u.USER_NAME,
u.USER_PWD,
d.DEPT_NAME,
d.DEPT_TYPE
FROM
TB_USER u,TB_DEPARTMENT d WHERE u.dept_id = d.id
具体的配置步骤是按照ralasafe相关文档做完后,项目重启,OK,没有问题。当我满怀信心的认为我已经成功的与项目集成后,问题来了,当我在ralasafe控制界面导入用户元数据时缺意外的报错了,如图:
然后我又仔细检查了配置,OK都没有问题啊,而且我跑demo时把数据源也换成db2的了,而且也没有问题啊。
我想会不会是某个过滤器影响了ralasafe的功能呢?刚好群里的小戴童鞋提示是struts2的过滤器的问题。
后来我把struts2的过滤器
<filter-mapping>
<filter-name>struts2</filter-name>
[color=red]<url-pattern>/*</url-pattern>[/color]
</filter-mapping>
换成
<filter-mapping>
<filter-name>struts2</filter-name>
[color=red]
<url-pattern>*.action</url-pattern>[/color]
</filter-mapping>
红色部分,OK,问题解决。