上页 目录 下页
安装 系统架构

配置与应用集成

数据源

我们推荐将ralasafe数据和应用数据分开保存。Ralasafe的数据源在哪里呢?应用的数据源在哪里呢?他们的用户名密码是多少?这些可以在 WEB-INF/ralasafe/datasources.xml 里面配置。

注意:"ralasafe"数据源是必须的,ralasafe的结构性数据,都保存在该数据源。

Ralasafe支持三种数据源:

  1. Ralasafe自带的Apache DBCP数据源, WEB-INF/ralasafe/ralasafe-db.properties就是一个配置示例;
  2. Jndi数据源,WEB-INF/ralasafe/jndi.properties就是一个配置示例,只需修改jndiName即可;
  3. 通过调用Java方法获取到数据源,WEB-INF/ralasafe/method.properties就是一个配置示例,只需修改class和method属性值即可。

策略存放目录

安全策略(非结构性数据)保存在文件系统,这样移植非常方便。其他权限数据保存在数据库里面。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,...)
WebRalasafe.query(HttpServletRequest req, int privilegeId)

2) 向系统提交数据

Ralasafe.permit((int privilegeId, User user, Object businessData,...)
WebRalasafe.permit((HttpServletRequest req, int privilegeId, Object businessObject,...)

您可以通过API调用方式,也可以将其集成到您的aspect里面进行aop拦截。privilegeId可以通过ralasafe gui导出。在权限面板,点击右边的导出按钮

查看org.ralasafe.Ralasafe, org.ralasafe.WebRalasafe javadoc,阅读详细信息。

上页 目录 下页
安装 系统架构