|
上页 | 目录 | 下页 | |
| 安装 | 系统架构 | |||
我们推荐将ralasafe数据和应用数据分开保存。Ralasafe的数据源在哪里呢?应用的数据源在哪里呢?他们的用户名密码是多少?这些可以在 WEB-INF/ralasafe/datasources.xml 里面配置。
Ralasafe支持三种数据源:
安全策略(非结构性数据)保存在文件系统,这样移植非常方便。其他权限数据保存在数据库里面。Ralasafe支持主流数据库,oracle、db2、mysql和sql server等。
安全策略数据存放目录,可以在web.xml里面指定。修改org.ralasafe.servlet.StartupServlet配置参数repositoryDir值。
需要权限控制的系统,都需要用户名密码、用户登录。但不同系统的用户字段不同、字段类型也不同。Ralasafe通过用户元数据xml文件来描述。我们参考ralasafe demo应用:
<?xml version="1.0"?> <user> <table ds="app" name="mainTable" sqlName="UserView" uniqueFields="loginName"> <field name="id" columnName="id" sqlType="int" javaType="java.lang.Integer" /> <field name="name" columnName="name" sqlType="varchar(40)" javaType="java.lang.String" displayName="Name" show="true" /> <field name="companyName" columnName="companyName" sqlType="varchar(100)" javaType="java.lang.String" displayName="Company" show="true" /> <field name="loginName" columnName="loginName" sqlType="varchar(40)" javaType="java.lang.String" /> <field name="password" columnName="password" sqlType="varchar(40)" javaType="java.lang.String" /> <field name="isManager" columnName="isManager" sqlType="int" javaType="java.lang.Boolean" /> <field name="companyId" columnName="companyId" sqlType="int" javaType="java.lang.Integer" /> <field name="departmentId" columnName="departmentId" sqlType="int" javaType="java.lang.Integer" /> <field name="companyLevel" columnName="companyLevel" sqlType="int" javaType="java.lang.Integer" /> </table> </user>
这个案例表示用户信息从数据库表或者视图UserView,该表定义在app数据源。用户含有字段:id(必须的),name, companyName, loginName, password, isManager, companyId, departmentId and companyLevel。loginName是该表的唯一约束字段。如果唯一约束字段由多个组成,中间使用","隔开。id字段是主键字段。
field元素的name属性表示用户的业务属性,columnName表示数据库表字段名称。读取用户属性的API,如下:
package org.back;
public class User {
public Object get( String fieldName );
......
}
我们再进一步研究field字段的displayName和show属性。就ralasafe demo,name和companyName两个字段将在用户面板显示,而且显示名称分别是:Name和Company。如图示:

当您配置好用户元数据后,可以通过这个url安装到系统:http://localhost:8080/{your web app}/ralasafe/userTypeMng
Ralasafe从两个方面控制应用安全,对应的API是:
| 1) 从系统查询数据 | Ralasafe.query(int privilegeId, User user,...) |
| 2) 向系统提交数据 | Ralasafe.permit((int privilegeId, User user,
Object businessData,...) |
您可以通过API调用方式,也可以将其集成到您的aspect里面进行aop拦截。privilegeId可以通过ralasafe gui导出。在权限面板,点击右边的导出按钮
。
查看org.ralasafe.Ralasafe, org.ralasafe.WebRalasafe javadoc,阅读详细信息。
|
上页 | 目录 | 下页 | |
| 安装 | 系统架构 | |||