bboss平台子系统配置及系统登录相关配置介绍
bboss平台可以包含一个主系统和多个子系统,每个子系统可以配置独立的子系统登录界面以及登录成功的跳转界面。
主系统配置:
主系统配置文件为/resources/module.xml文件,可以在module.xml中配置子系统和主系统的模块、首页及菜单
1.子系统配置
Xml代码
<subsystem name="移动门户" id="mbp" module="module-mbp.xml"
successRedirect="sanydesktop/index.page"
logoutredirect="/sanymbp/login.page"/>
直接在system根节点下配置subsystem 元素,如果不需要在登录界面看到或者要废弃某个子系统注释或者删掉即可,相关属性说明如下:
属性说明:
name-子系统名称,必填项
id-子系统唯一标识,必填项
module-子系统首页、模块以及菜单配置文件,必填项
logoutredirect-子系统登录界面,子系统注销时退出到logoutredirect指定的登录页,如果没有配置,则跳转到全局登录页面(/login.page)
successRedirect-子系统登录成功跳转页面,如果没有设置则由平台决定跳转地址(根据登录风格和子系统综合判断):逻辑如下
Java代码
private String getSuccessRedirect(String loginStyle, String subsystem) {
StringBuilder ret = new StringBuilder();
if(StringUtil.isEmpty(subsystem ))
{
if (loginStyle == null || loginStyle.equals("5") || loginStyle.equals("6")) {
ret.append("sanydesktop/indexcommon.page");
}
else if ((loginStyle != null && loginStyle.equals("1")) || loginStyle.equals("cms")) {
ret.append("index.jsp?subsystem_id=").append(subsystem);
} else if (loginStyle.equals("3")) {
ret.append("sanydesktop/index.page");
} else if (loginStyle.equals("2")) {
ret.append("desktop/desktop1.page");
} else if (loginStyle.equals("4")) {
ret.append("sanydesktop/webindex.page");
}
else
{
ret.append("sanydesktop/indexcommon.page");
}
}
else
{
SubSystem sys = Framework.getSubSystem(subsystem);
if(sys != null && !StringUtil.isEmpty(sys.getSuccessRedirect()))
ret.append(sys.getSuccessRedirect());
else
{
if (loginStyle == null || loginStyle.equals("5") || loginStyle.equals("6")) {
ret.append("sanydesktop/indexcommon.page");
}
else if ((loginStyle != null && loginStyle.equals("1")) || loginStyle.equals("cms")) {
ret.append("index.jsp?subsystem_id=").append(subsystem);
} else if (loginStyle.equals("3")) {
ret.append("sanydesktop/index.page");
} else if (loginStyle.equals("2")) {
ret.append("desktop/desktop1.page");
} else if (loginStyle.equals("4")) {
ret.append("sanydesktop/webindex.page");
}
else
{
ret.append("sanydesktop/indexcommon.page");
}
}
}
return ret.toString();
}
2.指定全局默认子系统
在单点登录时系统没有传递subsystem_id参数时默认读取全局默认子系统id作为当前登录的子系统,并且会进入对应子系统的首页,指定全局默认子系统方法,修改resources\properties-sys.xml文件中的属性default_module即可:
Xml代码
<property name="default_module" value="module"/>
3.指定热加载菜单配置文件控制开关
热加载菜单配置文件控制开关用来控制当菜单文件修改后是否自动加载修改后的文件,修改resources\properties-sys.xml文件中的属性menu_monitor(默认为true)即可:
Java代码
<property name="menu_monitor" value="true"/>
4.全局默认登录页面配置
如果子系统没有指定自己的登录界面,则和主系统一样使用全局默认登录界面作为登录页,指定方法为:
修改resources/config-manager.xml中authenticate元素的loginpage属性
Xml代码
<authenticate loginpage="login.page">
.....
</authenticate>
5.系统用户访问页面权限检测失败(无权限)调整地址配置
修改WebRoot/WEB-INF/web.xml文件过滤securityFilter的authorfailedurl参数:
Xml代码
<filter>
<filter-name>securityFilter</filter-name>
<filter-class>com.frameworkset.platform.security.SYSAuthenticateFilter</filter-class>
。。。。
<init-param>
<param-name>authorfailedurl</param-name>
<param-value>/common/jsp/authorfail.jsp</param-value>
</init-param>
。。。。。。
</filter>
6.平台免登录url配置
修改WebRoot/WEB-INF/web.xml文件过滤securityFilter的patternsExclude参数:
Xml代码
<filter>
<filter-name>securityFilter</filter-name>
<filter-class>com.frameworkset.platform.security.SYSAuthenticateFilter</filter-class>
。。。。
<init-param>
<param-name>patternsExclude</param-name>
<param-value>
/sysmanager/logoutredirect.jsp,
/login.jsp,
/login.page,
/login_en.jsp,
/logout.jsp,
/webseal/websealloginfail.jsp,
/webseal/message.jsp,
/test/testmmssso.jsp,
/test/testssowithtoken.jsp,
/sso/login.jsp,
/sso/sso.page,
/sso/ssowithtoken.page,
/sso/ssowithticket.page,
/sanydesktop/cookieLocale.page,
/sysmanager/password/modifyExpiredUserPWD.jsp,
/passward/modifyExpiredPassword.page,
/passward/generateImageCode.page,
/common/jsp/tokenfail.jsp,
/sanymbp/login.page,
/monitor/dbmonitor_activitedetail.jsp
</param-value>
</init-param>
。。。。。。
</filter>
其中地址清单以逗号分隔,可以写具体的地址,亦可以写通配符地址,例如:
/sso/ssowithticket.page
/sso/*.page
7.按照菜单配置顺序获取当前用户带权限的菜单列表
Java代码
1.获取module下按配置顺序排序的权限菜单方法:
public static void geSubMenus(Map<String,MenuItemU> permissionMenus,Module module,HttpServletRequest request,AccessControl accesscontroler)
{
MenuQueue menus = module.getMenus();
String contextpath = request.getContextPath();
for(int i = 0 ; menus != null && i < menus.size() ; i ++)
{
MenuItem menu = menus.getMenuItem(i);
if (!menu.isUsed()) {
continue;
}
if(menu instanceof Module)
{
MenuItemU menuItemU = new MenuItemU();
menuItemU.setId(menu.getId());
menuItemU.setName(menu.getName(request));
menuItemU.setImageUrl(menu.getMouseclickimg(request));
menuItemU.setType("module");
permissionMenus.put(menu.getId(), menuItemU);
}
else
{
Item item = (Item)menu;
String url = null;
String area = item.getArea();
if(area != null && area.equals("main"))
{
url = MenuHelper.getMainUrl(contextpath, item,
(java.util.Map) null);
}
else
{
url = MenuHelper.getRealUrl(contextpath, Framework.getWorkspaceContent(item,accesscontroler),MenuHelper.sanymenupath_menuid,item.getId());
}
MenuItemU menuItemU = new MenuItemU();
menuItemU.setId(item.getId());
menuItemU.setName(item.getName(request));
menuItemU.setImageUrl(item.getMouseclickimg(request));
menuItemU.setPathU(url);
menuItemU.setType("item");
menuItemU.setDesktop_height(item.getDesktop_height());
menuItemU.setDesktop_width(item.getDesktop_width());
permissionMenus.put(item.getId(), menuItemU);
}
}
}
2.获取一级排序菜单的方法:
MenuHelper menuHelper = MenuHelper.getMenuHelper(request);
MenuQueue menus = menuHelper.getMenus();
7.平台自定义资源权限控制使用方法
参考文档:
http://yin-bp.iteye.com/blog/2147000
8.子系统与权限资源关联方法
我们在resource.xml文件中配置定义了一类资源时,需要将其与对应的子系统关联,关联方法如下:
Xml代码
<!-- 机构资源 -->
<resource id="orgunit" name="机构资源" i18n:en_US="Organization Resource" class="resOrgTree.jsp" default="true" allowIfNoRequiredRole="false" auto="true" system="module,cms,mbp,esb,autodeploy,dp">
<!--定义非未受保护的特殊资源-->
<!--<exclude resourceid="*"/>
<operation id="userorgset"/>
</exclude>-->
<!--
定义资源操作组
name:指定资源操作组的名称,具体的操作定义在操作组中
-->
<operationgroup groupid="orgoperations"/>
<!--
机构资源全局操作
globalresourceid:全局操作对应的资源标识id
groupid:全局操作对应的操作组
-->
<globaloperationgroup globalresourceid="orgunit" groupid="gloabelorgunit"/>
</resource>
资源resource元素的system属性中指定资源对应的系统标识,例如:
system="module,cms,mbp,esb,autodeploy,dp"
其中module是默认的主系统标识,其他是子系统标识(cms,mbp,esb,autodeploy,dp),只有将资源与子系统关联后,在权限管理的授权界面中才能看到这些资源并对相应的资源进行授权。这些子系统在module.xml文件中进行配置:
Xml代码
<system languages="zh_CN,en_US">
<!-- 定义系统中的子系统功能模块 属性:name-子系统中文名称 id-子系统标识 module-模块文件名称 baseuri-如果子系统部署在其他的应用 -->
<subsystem name="内容管理" i18n:en_US="Content Manager" id="cms" template="cms" module="module-content.xml"
baseuri="http://localhost:7000/creatorcms" />
<subsystem name="请求服务管理" i18n:en_US="ESB Manager" id="esb" module="module-esb.xml"
baseuri="http://localhost:7000/creatorcms" />
<subsystem name="代理商门户" i18n:en_US="代理商门户" id="dp" module="module-dp.xml"
baseuri="http://localhost:7000/creatorcms" />
<subsystem name="WEB应用统计平台" i18n:en_US="WEB应用统计平台" id="sanylog" module="module-sanylog.xml"
baseuri="http://localhost:7000/creatorcms" />
<subsystem name="移动门户" i18n:en_US="移动门户" id="mbp" module="module-mbp.xml"
baseuri="http://localhost:7000/creatorcms"
successRedirect="sanydesktop/index.page"
logoutredirect="/sanymbp/login.page"/>
................
</system>
其中的subsystem 的id属性指定了子系统标识。
9.菜单中引用属性文件中定义的变量
首先定义变量属性文件,文件存放在对应的resources包路径下面,例如一个配置了url地址的文件/resources/urls.xml,其中定义了一个变量hrmappurl:
Xml代码
<properties>
<property name="hrmappurl" value="http://hrm.sany.com.cn/NHRM"/>
</properties>
这样就可以在菜单配置文件中导入这个urls.xml文件:
主系统module.xml
Xml代码
<system languages="zh_CN,en_US">
<!-- 可以配置一些菜单变量,
菜单路径配置中除了可以配置#[userAccount]类的变量,还可以配置#[p:userAccount]类型变量,p:开头的变量的值可以从属性文件中获取,属性文件的配置方法是:
-->
<property file="urls.xml"/>
</system>
导入urls.xml后我们就可以在菜单地址中引用hrmappurl这个变量了,方法如下:
Xml代码
<content>#[p:hrmappurl]/html3/rms/conference.html?aaa=#[userAccount]</content>
引用语法说明:#[p:hrmappurl]
变量以#[和]标识,以p:作为变量前缀。
10.菜单对应的url引用当前用户会话属性作为参数方法
在菜单url地址中可以直接引用当前登录用户的会话属性,引用方法如下:
<content>/html3/rms/conference.html?aaa=#[userAccount]</content>
已#[和]标识会话属性,在其中直接指定会话属性即可。
平台内置的具体的会话属性清单请参考文档的备注部分:
平台登录插件开发和配置
当然通过扩展登录插件也可以扩展添加系统特定的会话属性。
11.平台中开启和关闭会话共享方法
平台中关闭和开启session共享机制方法:
开启,修改文件resources/sessionconf.xml 属性为:
<property name="sessionstore" refid="attr:sessionstore"/>
<!-- <property name="sessionstore" value="session"/>-->
关闭,修改文件resources/sessionconf.xml 属性为:
<!-- <property name="sessionstore" refid="attr:sessionstore"/> -->
<property name="sessionstore" value="session"/>
12.平台中开启和关闭统一令牌方法
平台中关闭token和开启token机制方法:
开启,修改文件resources/tokenconf.xml 属性为:
<property name="enableToken" value="true"/>
<property name="tokenstore" refid="attr:tokenStoreService"/>
关闭,修改文件resources/tokenconf.xml 属性为:
<property name="tokenstore" value="mem"/>
<property name="enableToken" value="false"/>
13.mongodb配置
修改配置文件:/resources/mongodb.xml
集群配置:修改serverAddresses中服务器地址清单
Xml代码
<properties>
<!-- 增加mongodb数据源配置和client工厂类 -->
<property name="default" factory-class="org.frameworkset.nosql.mongodb.MongoDB"
init-method="init" destroy-method="close" factory-method="getMongoClient">
<!-- 这里不需要配置destroy-method,因为bboss持久层在jvm退出时会自动调用数据源的close方法 -->
<property name="serverAddresses" >
10.0.15.134:27017
10.0.15.134:27018
10.0.15.38:27017
10.0.15.39:27017
</property>
<property name="option" >
QUERYOPTION_SLAVEOK
</property>
<property name="writeConcern" value="REPLICA_ACKNOWLEDGED(4,2000)"/>
<property name="readPreference" value="NEAREST"/>
<property name="autoConnectRetry" value="true"/>
<property name="connectionsPerHost" value="10"/>
<property name="maxWaitTime" value="120000"/>
<property name="socketTimeout" value="0"/>
<property name="connectTimeout" value="15000"/>
<property name="threadsAllowedToBlockForConnectionMultiplier" value="5"/>
<property name="socketKeepAlive" value="true"/>
<!-- 如果需要用户认证则在下面配置mongodb的数据库验证用户和口令以及机制 -->
<!-- mechanism 取值范围:PLAIN GSSAPI MONGODB-CR MONGODB-X509,默认为MONGODB-CR -->
<!--<property name="credentials">
<list componentType="bean">
<property class="org.frameworkset.nosql.mongodb.ClientMongoCredential"
f:mechanism="MONGODB-CR"
f:database="sessiondb"
f:userName="bboss"
f:password="bboss"/>
<property class="org.frameworkset.nosql.mongodb.ClientMongoCredential"
f:mechanism="MONGODB-CR"
f:database="tokendb"
f:userName="bboss"
f:password="bboss"/>
</list>
</property> -->
</property>
</properties>
单机配置:
Xml代码
<properties>
<!-- 增加mongodb数据源配置和client工厂类 -->
<property name="default" factory-class="org.frameworkset.nosql.mongodb.MongoDB"
init-method="init" destroy-method="close" factory-method="getMongoClient">
<property name="serverAddresses" >
127.0.0.1:27016
</property>
<property name="option" ></property>
<property name="writeConcern" value="JOURNAL_SAFE"/>
<property name="readPreference" value=""/>
<!-- 如果需要用户认证则在下面配置mongodb的数据库验证用户和口令以及机制 -->
<!-- mechanism 取值范围:PLAIN GSSAPI MONGODB-CR MONGODB-X509,默认为MONGODB-CR -->
<!--<property name="credentials">
<list componentType="bean">
<property class="org.frameworkset.nosql.mongodb.ClientMongoCredential"
f:mechanism="MONGODB-CR"
f:database="sessiondb"
f:userName="bboss"
f:password="bboss"/>
<property class="org.frameworkset.nosql.mongodb.ClientMongoCredential"
f:mechanism="MONGODB-CR"
f:database="tokendb"
f:userName="bboss"
f:password="bboss"/>
</list>
</property>-->
</property>
</properties>
13.数据库地址配置
修改配置文件:
/resources/poolman.xml
Xml代码
<?xml version="1.0" encoding="UTF-8"?>
<poolman>
<datasource>
<dbname>bspf</dbname>
<loadmetadata>false</loadmetadata>
<enablejta>true</enablejta>
<jndiName>druid_datasource_jndiname</jndiName>
<datasourceFile>dbcp.xml</datasourceFile>
<autoprimarykey>false</autoprimarykey>
<showsql>true</showsql>
<keygenerate>composite</keygenerate>
</datasource>
</poolman>
/resources/dbcp.xml
Xml代码
<property name="datasource" class="com.frameworkset.commons.dbcp2.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://10.0.15.134:3306/domysql"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
<!--initialSize: 初始化连接-->
<property name="initialSize" value="5"/>
<property name="maxTotal" value="20"/>
<!--maxIdle: 最大空闲连接-->
<property name="maxIdle" value="20"/>
<!--minIdle: 最小空闲连接-->
<property name="minIdle" value="20"/>
<!--removeAbandoned: 是否自动回收超时连接-->
<property name="removeAbandonedOnBorrow" value="false"/>
<property name="logAbandoned" value="true"/>
<!--removeAbandonedTimeout: 超时时间(以秒数为单位)-->
<property name="removeAbandonedTimeout" value="180"/>
<!--maxWait: 超时等待时间以毫秒为单位 6000毫秒/1000等于6秒-->
<property name="maxWaitMillis" value="3000"/>
<property name="validationQuery" value="SELECT 1 "/>
<property name="testOnBorrow" value="true"/>
</property>
调整其中的各个项即可,不同的数据库driver,validationQuery,url都需要进行调整