bboss平台子系统配置及系统登录相关配置介绍

bboss平台子系统配置及系统登录相关配置介绍 

bboss平台可以包含一个主系统和多个子系统,每个子系统可以配置独立的子系统登录界面以及登录成功的跳转界面。 

主系统配置: 
主系统配置文件为/resources/module.xml文件,可以在module.xml中配置子系统和主系统的模块、首页及菜单 

1.子系统配置 

Xml代码  收藏代码

  1. <subsystem name="移动门户"  id="mbp" module="module-mbp.xml"  

  2.             successRedirect="sanydesktop/index.page"  

  3.     logoutredirect="/sanymbp/login.page"/>  


直接在system根节点下配置subsystem 元素,如果不需要在登录界面看到或者要废弃某个子系统注释或者删掉即可,相关属性说明如下: 
属性说明: 
name-子系统名称,必填项 
id-子系统唯一标识,必填项 
module-子系统首页、模块以及菜单配置文件,必填项 
logoutredirect-子系统登录界面,子系统注销时退出到logoutredirect指定的登录页,如果没有配置,则跳转到全局登录页面(/login.page) 
successRedirect-子系统登录成功跳转页面,如果没有设置则由平台决定跳转地址(根据登录风格和子系统综合判断):逻辑如下 

Java代码  收藏代码

  1. private String getSuccessRedirect(String loginStyle, String subsystem) {  

  2.         StringBuilder ret = new StringBuilder();  

  3.         if(StringUtil.isEmpty(subsystem ))  

  4.         {  

  5.           

  6.             if (loginStyle == null || loginStyle.equals("5") || loginStyle.equals("6")) {  

  7.                 ret.append("sanydesktop/indexcommon.page");  

  8.             }   

  9.             else if ((loginStyle != null && loginStyle.equals("1")) || loginStyle.equals("cms")) {  

  10.                 ret.append("index.jsp?subsystem_id=").append(subsystem);  

  11.             } else if (loginStyle.equals("3")) {  

  12.                 ret.append("sanydesktop/index.page");  

  13.             } else if (loginStyle.equals("2")) {  

  14.                 ret.append("desktop/desktop1.page");  

  15.             } else if (loginStyle.equals("4")) {  

  16.                 ret.append("sanydesktop/webindex.page");  

  17.             }  

  18.             else  

  19.             {  

  20.                 ret.append("sanydesktop/indexcommon.page");  

  21.             }  

  22.         }  

  23.         else  

  24.         {  

  25.             SubSystem sys = Framework.getSubSystem(subsystem);  

  26.             if(sys != null && !StringUtil.isEmpty(sys.getSuccessRedirect()))  

  27.                 ret.append(sys.getSuccessRedirect());  

  28.             else  

  29.             {  

  30.                 if (loginStyle == null || loginStyle.equals("5") || loginStyle.equals("6")) {  

  31.                     ret.append("sanydesktop/indexcommon.page");  

  32.                 }   

  33.                 else if ((loginStyle != null && loginStyle.equals("1")) || loginStyle.equals("cms")) {  

  34.                     ret.append("index.jsp?subsystem_id=").append(subsystem);  

  35.                 } else if (loginStyle.equals("3")) {  

  36.                     ret.append("sanydesktop/index.page");  

  37.                 } else if (loginStyle.equals("2")) {  

  38.                     ret.append("desktop/desktop1.page");  

  39.                 } else if (loginStyle.equals("4")) {  

  40.                     ret.append("sanydesktop/webindex.page");  

  41.                 }  

  42.                 else  

  43.                 {  

  44.                     ret.append("sanydesktop/indexcommon.page");  

  45.                 }  

  46.             }  

  47.         }  

  48.         return ret.toString();  

  49.     }  



2.指定全局默认子系统 
在单点登录时系统没有传递subsystem_id参数时默认读取全局默认子系统id作为当前登录的子系统,并且会进入对应子系统的首页,指定全局默认子系统方法,修改resources\properties-sys.xml文件中的属性default_module即可: 

Xml代码  收藏代码

  1. <property name="default_module" value="module"/>  



3.指定热加载菜单配置文件控制开关 

热加载菜单配置文件控制开关用来控制当菜单文件修改后是否自动加载修改后的文件,修改resources\properties-sys.xml文件中的属性menu_monitor(默认为true)即可: 

Java代码  收藏代码

  1. <property name="menu_monitor" value="true"/>  


4.全局默认登录页面配置 
如果子系统没有指定自己的登录界面,则和主系统一样使用全局默认登录界面作为登录页,指定方法为: 
修改resources/config-manager.xml中authenticate元素的loginpage属性 

Xml代码  收藏代码

  1. <authenticate loginpage="login.page">  

  2.             .....  

  3.         </authenticate>  


5.系统用户访问页面权限检测失败(无权限)调整地址配置 
修改WebRoot/WEB-INF/web.xml文件过滤securityFilter的authorfailedurl参数: 

Xml代码  收藏代码

  1. <filter>  

  2.     <filter-name>securityFilter</filter-name>  

  3.     <filter-class>com.frameworkset.platform.security.SYSAuthenticateFilter</filter-class>  

  4.         。。。。   

  5.         <init-param>  

  6.             <param-name>authorfailedurl</param-name>  

  7.             <param-value>/common/jsp/authorfail.jsp</param-value>  

  8.         </init-param>  

  9.         。。。。。。         

  10.   </filter>  


6.平台免登录url配置 
修改WebRoot/WEB-INF/web.xml文件过滤securityFilter的patternsExclude参数: 

Xml代码  收藏代码

  1. <filter>  

  2.     <filter-name>securityFilter</filter-name>  

  3.     <filter-class>com.frameworkset.platform.security.SYSAuthenticateFilter</filter-class>  

  4.        。。。。      

  5.         <init-param>  

  6.       <param-name>patternsExclude</param-name>  

  7.       <param-value>  

  8.             /sysmanager/logoutredirect.jsp,  

  9.             /login.jsp,  

  10.             /login.page,  

  11.             /login_en.jsp,  

  12.             /logout.jsp,  

  13.             /webseal/websealloginfail.jsp,  

  14.             /webseal/message.jsp,  

  15.             /test/testmmssso.jsp,  

  16.             /test/testssowithtoken.jsp,  

  17.             /sso/login.jsp,  

  18.             /sso/sso.page,  

  19.             /sso/ssowithtoken.page,  

  20.             /sso/ssowithticket.page,  

  21.             /sanydesktop/cookieLocale.page,  

  22.            /sysmanager/password/modifyExpiredUserPWD.jsp,  

  23.           /passward/modifyExpiredPassword.page,  

  24.           /passward/generateImageCode.page,  

  25.           /common/jsp/tokenfail.jsp,  

  26.           /sanymbp/login.page,  

  27.           /monitor/dbmonitor_activitedetail.jsp  

  28.            </param-value>  

  29.     </init-param>  

  30.         。。。。。。         

  31.   </filter>  


其中地址清单以逗号分隔,可以写具体的地址,亦可以写通配符地址,例如: 
/sso/ssowithticket.page 
/sso/*.page 

7.按照菜单配置顺序获取当前用户带权限的菜单列表 

Java代码  收藏代码

  1. 1.获取module下按配置顺序排序的权限菜单方法:  

  2.   

  3. public static void geSubMenus(Map<String,MenuItemU> permissionMenus,Module module,HttpServletRequest request,AccessControl accesscontroler)  

  4.     {  

  5.           

  6.         MenuQueue menus = module.getMenus();  

  7.         String contextpath = request.getContextPath();  

  8.         for(int i = 0 ; menus != null && i < menus.size() ; i ++)  

  9.         {  

  10.             MenuItem menu = menus.getMenuItem(i);  

  11.             if (!menu.isUsed()) {  

  12.                 continue;  

  13.             }  

  14.             if(menu instanceof Module)  

  15.             {  

  16.                 MenuItemU menuItemU = new MenuItemU();  

  17.                 menuItemU.setId(menu.getId());  

  18.                 menuItemU.setName(menu.getName(request));  

  19.                 menuItemU.setImageUrl(menu.getMouseclickimg(request));  

  20.                 menuItemU.setType("module");  

  21.                 permissionMenus.put(menu.getId(), menuItemU);  

  22.             }  

  23.             else  

  24.             {  

  25.                 Item item = (Item)menu;  

  26.                   

  27.                 String url = null;  

  28.                 String area = item.getArea();  

  29.                 if(area != null && area.equals("main"))  

  30.                 {  

  31.                     url = MenuHelper.getMainUrl(contextpath, item,  

  32.                             (java.util.Map) null);  

  33.                 }  

  34.                 else  

  35.                 {  

  36.                     url = MenuHelper.getRealUrl(contextpath, Framework.getWorkspaceContent(item,accesscontroler),MenuHelper.sanymenupath_menuid,item.getId());  

  37.                 }  

  38.                 MenuItemU menuItemU = new MenuItemU();  

  39.                 menuItemU.setId(item.getId());  

  40.                 menuItemU.setName(item.getName(request));  

  41.                 menuItemU.setImageUrl(item.getMouseclickimg(request));  

  42.                 menuItemU.setPathU(url);  

  43.                 menuItemU.setType("item");  

  44.                 menuItemU.setDesktop_height(item.getDesktop_height());  

  45.                 menuItemU.setDesktop_width(item.getDesktop_width());  

  46.                 permissionMenus.put(item.getId(), menuItemU);  

  47.             }  

  48.         }  

  49.        

  50.            

  51.     }  

  52.       

  53. 2.获取一级排序菜单的方法:  

  54.       

  55.     MenuHelper menuHelper = MenuHelper.getMenuHelper(request);  

  56.         MenuQueue menus = menuHelper.getMenus();  



7.平台自定义资源权限控制使用方法 
参考文档: 
http://yin-bp.iteye.com/blog/2147000 
8.子系统与权限资源关联方法 
我们在resource.xml文件中配置定义了一类资源时,需要将其与对应的子系统关联,关联方法如下: 

Xml代码  收藏代码

  1. <!-- 机构资源 -->  

  2.     <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">  

  3.         <!--定义非未受保护的特殊资源-->     

  4.         <!--<exclude resourceid="*"/>  

  5.         <operation id="userorgset"/>  

  6.         </exclude>-->  

  7.               

  8.         <!--  

  9.             定义资源操作组  

  10.             name:指定资源操作组的名称,具体的操作定义在操作组中  

  11.         -->  

  12.         <operationgroup groupid="orgoperations"/>  

  13.                   

  14.         <!--   

  15.             机构资源全局操作  

  16.             globalresourceid:全局操作对应的资源标识id  

  17.             groupid:全局操作对应的操作组  

  18.         -->  

  19.         <globaloperationgroup globalresourceid="orgunit" groupid="gloabelorgunit"/>  

  20.     </resource>  



资源resource元素的system属性中指定资源对应的系统标识,例如: 
system="module,cms,mbp,esb,autodeploy,dp" 
其中module是默认的主系统标识,其他是子系统标识(cms,mbp,esb,autodeploy,dp),只有将资源与子系统关联后,在权限管理的授权界面中才能看到这些资源并对相应的资源进行授权。这些子系统在module.xml文件中进行配置: 

Xml代码  收藏代码

  1. <system languages="zh_CN,en_US">  

  2.     <!-- 定义系统中的子系统功能模块 属性:name-子系统中文名称 id-子系统标识 module-模块文件名称 baseuri-如果子系统部署在其他的应用 -->  

  3.     <subsystem name="内容管理" i18n:en_US="Content Manager" id="cms" template="cms" module="module-content.xml"  

  4.           

  5.         baseuri="http://localhost:7000/creatorcms" />  

  6.     <subsystem name="请求服务管理" i18n:en_US="ESB Manager" id="esb" module="module-esb.xml"  

  7.           

  8.         baseuri="http://localhost:7000/creatorcms" />  

  9.           

  10.     <subsystem name="代理商门户" i18n:en_US="代理商门户" id="dp" module="module-dp.xml"          

  11.         baseuri="http://localhost:7000/creatorcms" />  

  12.     <subsystem name="WEB应用统计平台" i18n:en_US="WEB应用统计平台" id="sanylog" module="module-sanylog.xml"        

  13.         baseuri="http://localhost:7000/creatorcms" />          

  14.           

  15.     <subsystem name="移动门户" i18n:en_US="移动门户" id="mbp" module="module-mbp.xml"  

  16.         baseuri="http://localhost:7000/creatorcms"   

  17.         successRedirect="sanydesktop/index.page"  

  18.         logoutredirect="/sanymbp/login.page"/>  

  19.   

  20. ................  

  21.   

  22. </system>  


其中的subsystem 的id属性指定了子系统标识。 
9.菜单中引用属性文件中定义的变量 
首先定义变量属性文件,文件存放在对应的resources包路径下面,例如一个配置了url地址的文件/resources/urls.xml,其中定义了一个变量hrmappurl: 

Xml代码  收藏代码

  1. <properties>    

  2.     <property name="hrmappurl" value="http://hrm.sany.com.cn/NHRM"/>  

  3. </properties>  


这样就可以在菜单配置文件中导入这个urls.xml文件: 
主系统module.xml 

Xml代码  收藏代码

  1. <system languages="zh_CN,en_US">  

  2.       

  3.     <!-- 可以配置一些菜单变量,  

  4.     菜单路径配置中除了可以配置#[userAccount]类的变量,还可以配置#[p:userAccount]类型变量,p:开头的变量的值可以从属性文件中获取,属性文件的配置方法是:     

  5.      -->  

  6.     <property file="urls.xml"/>     

  7. </system>  


导入urls.xml后我们就可以在菜单地址中引用hrmappurl这个变量了,方法如下: 

Xml代码  收藏代码

  1. <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代码  收藏代码

  1. <properties>  

  2.     <!-- 增加mongodb数据源配置和client工厂类 -->  

  3.     <property name="default" factory-class="org.frameworkset.nosql.mongodb.MongoDB"  

  4.         init-method="init" destroy-method="close" factory-method="getMongoClient">  

  5.           

  6.         <!-- 这里不需要配置destroy-method,因为bboss持久层在jvm退出时会自动调用数据源的close方法 -->  

  7.         <property name="serverAddresses" >  

  8.             10.0.15.134:27017  

  9.             10.0.15.134:27018  

  10.             10.0.15.38:27017  

  11.             10.0.15.39:27017  

  12.         </property>  

  13.         <property name="option" >  

  14.             QUERYOPTION_SLAVEOK  

  15.         </property>  

  16.               

  17.         <property name="writeConcern" value="REPLICA_ACKNOWLEDGED(4,2000)"/>  

  18.         <property name="readPreference" value="NEAREST"/>       

  19.         <property name="autoConnectRetry" value="true"/>        

  20.         <property name="connectionsPerHost" value="10"/>    

  21.         <property name="maxWaitTime" value="120000"/>   

  22.         <property name="socketTimeout" value="0"/>      

  23.         <property name="connectTimeout" value="15000"/>     

  24.         <property name="threadsAllowedToBlockForConnectionMultiplier" value="5"/>   

  25.         <property name="socketKeepAlive" value="true"/>     

  26.         <!-- 如果需要用户认证则在下面配置mongodb的数据库验证用户和口令以及机制 -->   

  27.         <!-- mechanism 取值范围:PLAIN GSSAPI MONGODB-CR MONGODB-X509,默认为MONGODB-CR  -->  

  28.         <!--<property name="credentials">  

  29.             <list componentType="bean">   

  30.                   

  31.                 <property class="org.frameworkset.nosql.mongodb.ClientMongoCredential"  

  32.                     f:mechanism="MONGODB-CR"  

  33.                     f:database="sessiondb"  

  34.                     f:userName="bboss"                    

  35.                     f:password="bboss"/>   

  36.                 <property class="org.frameworkset.nosql.mongodb.ClientMongoCredential"  

  37.                     f:mechanism="MONGODB-CR"  

  38.                     f:database="tokendb"  

  39.                     f:userName="bboss"                    

  40.                     f:password="bboss"/>   

  41.                    

  42.             </list>  

  43.         </property> -->  

  44.     </property>  

  45.       

  46. </properties>  



单机配置: 

Xml代码  收藏代码

  1. <properties>  

  2.     <!-- 增加mongodb数据源配置和client工厂类 -->  

  3.     <property name="default" factory-class="org.frameworkset.nosql.mongodb.MongoDB"  

  4.         init-method="init" destroy-method="close" factory-method="getMongoClient">  

  5.           

  6.           

  7.         <property name="serverAddresses" >  

  8.              127.0.0.1:27016  

  9.         </property>  

  10.         <property name="option" ></property>  

  11.               

  12.           

  13.         <property name="writeConcern" value="JOURNAL_SAFE"/>  

  14.           

  15.         <property name="readPreference" value=""/>      

  16.         <!-- 如果需要用户认证则在下面配置mongodb的数据库验证用户和口令以及机制 -->   

  17.         <!-- mechanism 取值范围:PLAIN GSSAPI MONGODB-CR MONGODB-X509,默认为MONGODB-CR  -->  

  18.         <!--<property name="credentials">  

  19.             <list componentType="bean">   

  20.                   

  21.                 <property class="org.frameworkset.nosql.mongodb.ClientMongoCredential"  

  22.                     f:mechanism="MONGODB-CR"  

  23.                     f:database="sessiondb"  

  24.                     f:userName="bboss"                    

  25.                     f:password="bboss"/>   

  26.                 <property class="org.frameworkset.nosql.mongodb.ClientMongoCredential"  

  27.                     f:mechanism="MONGODB-CR"  

  28.                     f:database="tokendb"  

  29.                     f:userName="bboss"                    

  30.                     f:password="bboss"/>   

  31.                    

  32.             </list>  

  33.         </property>-->   

  34.     </property>  

  35. </properties>  



13.数据库地址配置 
修改配置文件: 
/resources/poolman.xml 

Xml代码  收藏代码

  1. <?xml version="1.0" encoding="UTF-8"?>  

  2.   

  3. <poolman>  

  4.   

  5.   

  6.   

  7.   

  8.     <datasource>  

  9.   

  10.         <dbname>bspf</dbname>  

  11.         <loadmetadata>false</loadmetadata>  

  12.         <enablejta>true</enablejta>  

  13.         <jndiName>druid_datasource_jndiname</jndiName>  

  14.         <datasourceFile>dbcp.xml</datasourceFile>  

  15.         <autoprimarykey>false</autoprimarykey>  

  16.         <showsql>true</showsql>  

  17.         <keygenerate>composite</keygenerate>  

  18.     </datasource>  

  19.   

  20.        

  21. </poolman>  


/resources/dbcp.xml 

Xml代码  收藏代码

  1. <property name="datasource" class="com.frameworkset.commons.dbcp2.BasicDataSource">  

  2.     <property name="driverClassName" value="com.mysql.jdbc.Driver"/>    

  3.     <property name="url" value="jdbc:mysql://10.0.15.134:3306/domysql"/>    

  4.     <property name="username" value="root"/>    

  5.     <property name="password" value="123456"/>    

  6.     <!--initialSize: 初始化连接-->    

  7.     <property name="initialSize" value="5"/>    

  8.     <property name="maxTotal" value="20"/>    

  9.     <!--maxIdle: 最大空闲连接-->    

  10.     <property name="maxIdle" value="20"/>    

  11.     <!--minIdle: 最小空闲连接-->    

  12.     <property name="minIdle" value="20"/>    

  13.   

  14.     <!--removeAbandoned: 是否自动回收超时连接-->    

  15.     <property name="removeAbandonedOnBorrow" value="false"/>  

  16.     <property name="logAbandoned" value="true"/>  

  17.     <!--removeAbandonedTimeout: 超时时间(以秒数为单位)-->    

  18.     <property name="removeAbandonedTimeout" value="180"/>    

  19.     <!--maxWait: 超时等待时间以毫秒为单位 6000毫秒/1000等于6秒-->    

  20.     <property name="maxWaitMillis" value="3000"/>    

  21.     <property name="validationQuery" value="SELECT 1 "/>      

  22.     <property name="testOnBorrow" value="true"/>   

  23. </property>  

  24.    


调整其中的各个项即可,不同的数据库driver,validationQuery,url都需要进行调整


转载于:https://my.oschina.net/bboss/blog/512523

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值