zoukankan      html  css  js  c++  java
  • Ralasafe配置手册

    Ralasafe访问控制(权限管理)中间件的配置工作非常少。因为项目发起人非常讨厌配置。因此,“己所不欲,勿施于人”,Ralasafe的配置也非常少。

    Ralasafe配置工作只有3个:

    1. 数据源配置
    2. 用户元数据配置
    3. web.xml配置策略XML文件存储路径

    权限逻辑配置,使用Ralasafe web控制端在线图形化设计,无需手工配置。

    Ralasafe将来可能会采取图形化方式处理前面提到的3种配置工作。但现在还是让我们先熟悉一下配置工作吧。

    数据源配置

     

    配置入口

    Ralasafe不仅强调权限与业务解耦合,也强调权限数据与业务数据解耦合,独立保存。

    Ralasafe数据源的入口是WEB-INF/ralasafe/datasources.xml文件,里面配置2个数据源。

    1. 其中1个是name=“ralasafe”的权限数据源,该数据源里面将保存权限数据。configFile属性指该权限数据源的详细配置信息,名称随意,但对应的文件必须也在WEB-INF/ralasafe目录下;
    2. 另1个是业务数据源,name属性自定义,只要不等于“ralasafe”即可。configFile属性指该业务数据源的详细配置信息,名称随意,但对 应的文件必须也在WEB-INF/ralasafe目录下。schema属性可选(可以有,也可以没有),该属性表示在数据查询页面显示数据源哪几个 schema的表和视图。

    下面是ralasafe demo自带的数据源配置信息:

    <?xml version="1.0"?>
    <datasources>
    <datasource name="ralasafe" configFile="ralasafe-db.properties"/>
    <datasource name="app" configFile="app-ds.properties"        
                                schemas="mydemo,ralasafe"/>
    </datasources>

    表示2个数据源:ralasafe和app。ralasafe数据源配置信息在ralasafe-db.properties文件里面;

    app数据源配置信息在app-ds.properties里面;在设计数据查询页面,指显示mydemo和ralasafe两个schema里面的表和视图。

    如下截图是,进入Ralasafe web控制端的查询设计界面,显示的数据库表和视图信息:

    如果,我将datasources.xml配置文件的schemas改成schemas=“mydemo”。将只显示mydemo里面的数据表和视图,不显示ralasafe里面的表和视图。

    详细配置信息

    前面讲到的configFile里面提到的配置文件,又如何配置数据源呢?Ralasafe又支持几种配置方式的数据源呢?

    Ralasafe支持3种方式配置数据源,且3种配置方式,都随发行包提供了示例。这些示例就是在WEB-INF/ralasafe目录下的ralasafe-db.properties,jndi.properties和method.properties。 下面详细叙述它们。

    DBCP数据源

    ralasafe-db.properties就是DBCP(http://commons.apache.org/dbcp/)数据源配置示例,Ralasafe将按照配置信息启动一个DBCP数据源。

    配置参数有jdbc驱动、用户名、密码和url等。配置参数与DBCP一致。

    jdbcDriver=com.mysql.jdbc.Driver
    jdbcUrl=jdbc:mysql://localhost/ralasafe?useUnicode=true
    jdbcUser=root
    jdbcPassword=1234
    connectionPoolMaxSize=5
    connectionPoolMaxIdle=2
    connectionPoolMaxWait=60000
    connectionPoolMinSize=0

    JNDI数据源

    JNDI数据源在Java EE程序里面非常常见。Ralasafe使用JNDI数据源,配置参数非常简单。

    写上type=jndi,然后配上jndi的名称即可。

    以下是配置示例:

    type=jndi
    jndiName=jdbc/datasourceName

    通过方法调用获取数据源

    假如,你的数据源需要通过调用API暴露(当然,我承认这种情况非常少)。当初,我是这么想的:或许有一种数据源我没用考虑到。那么就通过某个java方法调用获取吧。

    假如你有这样的API:

    public javax.sql.DataSource com.your.company.db.DatasourceProvider.getDatasource();

    那么对应的配置就是:

    type=method
    class=com.yourcompany.db.DataSourceProvider
    method=getDatasource

    创建基本权限数据库表

    当权限数据源配置好后,你还需要在权限数据库执行如下脚本,创建基础权限数据表。

    -- ralasafe schema
    CREATE TABLE ralasafe_sequence (
    currentValue int,
    name varchar(100) NOT NULL,
    PRIMARY KEY( name )
    );
    CREATE TABLE usertype (
    name varchar(100) NOT NULL,
    description varchar(500),
    userMetadataXML varchar(4000),
    PRIMARY KEY(name)
    );
    CREATE TABLE application (
    name varchar(100) NOT NULL,
    description varchar(500),
    PRIMARY KEY(name)
    );
    CREATE TABLE applicationusertype (
    appName varchar(100) NOT NULL,
    userTypeName varchar(100) NOT NULL,
    userMetadataStr varchar(1000),
    PRIMARY KEY(appName, userTypeName)
    );

    以上脚本,也随发行包提供,文件名称是sql/create-database.sql。

    用户元数据配置

    用户元数据的目的,就是为了说明当前应用系统的用户信息保存在哪里,有哪些字段,对应的业务意义是什么。

    在Ralasafe权限策略里面,钻取用户属性,我们使用业务意义的名称,而不是数据库列字段名称。

    你可以在本地配置好用户元数据文件,然后通过Ralasafe web控制端安装。安装方法为,首先登陆Ralasafe web控制端,比如:http://localhost:8080/demo/ralasafe/designer.rls,在左侧“架构师”一栏中选择【用户元数据】菜单;接着在“用户元数据”页面中,填写描述,并选择对应的用户元数据文件;最后,点击【Submit】按钮,系统将开始安装用户元数据。操作过程如下图所示:

    当用户元数据被顺利安装后,会在权限数据库生成 9 张表:

    ralasafe_businessdata,ralasafe_decision_entitlement,ralasafe_privilege,ralasafe_query,ralasafe_query_entitlement,ralasafe_ralasafe_userrole,ralasafe_role,ralasafe_roleprivilege 和ralasafe_usercategory。和前面手工创建的4张表一起,权限数据库应该共有 13 张表。如果没有 13 张表,说明安装用户元数据过程失败,需要重新安装。

    Ralasafe 1.1-版本还有ralasafe-backup表。该表在1.2+版本不再使用。

    如下是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>

    如上配置表示:

    1. 用户表在app数据源下,表名称是sqlName=“UserView”;
    2. name=“mainTable”是目前固定写法,不能改变,在后继版本会引入新的意义;
    3. 这个表的unique fields是”loginName”,如果有多个字段(如loginName,companyId)确定唯一用户,中间用逗号隔开即可。这里填写的是字 段必须在field元素里面有配置,而且填写的是field name属性值,而不是columnName属性值;
    4. field元素表示用户表的字段,每个字段的数据库列字段名称是什么(columnName属性),对应的业务意义是什么(name属性);
    5. 其中有2个业务意义字段是必须的:id和name,分别代表用户唯一id和用户名称;
    6. field的show=“true”表示该字段在页面显示,displayName属性表示该字段在页面显示名称(测试权限策略的时候,比如测试某用户查 询订单权限时,Ralasafe弹出的选择选择用户对话框,将显示show=”true”的用户字段,各个字段的title就是 displayName)。

    弹出用户选择对话框截图:

    注:

    1. 用户元数据配置支持数据库表和数据库视图。如果你的用户信息分散在多个表里面,你只要创建一个视图将用户各个字段统一到视图里面,然后在table的sqlName属性设置为你新创建的视图。
          
         Ralasafe demo的用户信息被统一到视图里面:
         create or replace view userview as select d."ID",d."LOGINNAME",d."NAME",d."PASSWORD",d."COMPANYID",d."DEPARTMENTID",d."ISMANAGER",
         d."HIREDATE",c.companylevel,c.name as companyName from demouser d, company c
         where d.companyid=c.id;
          
    2. 如果你的用户表没有id字段,但有一个唯一字段,那么可以将该字段等同于id字段设置到id里面。如:数据列myname是唯一字段,那么id字段可以设置为<field name=“id” columnName=“myname”….
    3. 如果你的用户表没有id字段,同时有多个唯一字段组合,那么你应该创建视图“做出”一个逻辑id字段,然后设置到id里面。如数据列mynamecompanyId是唯一字段组合,可以创建视图
      CREATE VIEW myview AS SELECT myname||companyId AS userId...

    XML文件存储路径配置

    因为各个数据库之间平台移植,大字段往往造成很大困难。所以,我们干脆将XML文件存在文件系统里面,就不存放在数据库里面。这样移植就方便很多;Ralasafe也多了一项配置工作——XML文件存储路径。

    打开WEB-INF/web.xml,找到如下代码行:

    	<servlet>
    		<servlet-name>ralasafe</servlet-name>
    		<servlet-class>org.ralasafe.servlet.RalasafeController</servlet-class>
    		<init-param>
    			<param-name>repositoryDir</param-name>
    			<param-value>/home/julian/workspace/ralasafe/xml</param-value>
    		</init-param>
    		<init-param>
    			<param-name>secured</param-name>
    			<param-value>false</param-value>
    		</init-param>
    		<load-on-startup>4</load-on-startup>
    	</servlet>

    设置repositoryDir的参数值为你存放XML存储路径的地方,如:d:/yourproject/xml等。等安装往用户元数据后,系统会自动在该目录下生成一些目录。目录结构是:

    ${repositoryDir}
           |____ralasafe
                      |____businessData
                      |____query
                      |____userCategory
                      |____usertype

    该配置也支持相对目录,只要new File(${repositoryDir})能找到对应目录即可。详情参考:论坛文章:配置repositoryDir的相对路径

    原文地址:https://www.cnblogs.com/skyme/articles/3208310.html
  • 相关阅读:
    postgresql怎么导入数据库
    flask建表遇到的错误: flask,sqlalchemy.exc.OperationalError: (MySQLdb._exceptions.OperationalError) (1071, 'Specified key was too long; max key length is 767 bytes')
    Linux(Ubuntu)系统下使用crontab定期执行任务
    Odoo中如何多workers中解决‘Bus.bus avriavle’
    python装饰器
    小程序开发可能会踩的坑
    Flask开发微信小程序后端基础知识准备
    Flask 中使用BluePrint蓝图分割业务代码,方便多人协作开发
    理解JWT(JSON Web Token)认证及python实践
    小程序中的数据请求sessionid,保持登陆状态。
  • 原文地址:https://www.cnblogs.com/jpfss/p/11045444.html
Copyright © 2011-2022 走看看