bboss session集成权威指南

原创
2016/10/15 13:09
阅读数 4.2K

        bboss session框架,为web应用提供session共享和session监控功能。主要功能:支持集群session共享,支持跨域session共享。。。了解更多特性:https://www.oschina.net/p/bboss-session

集成目标

集成bboss session框架,为web应用提供session共享和session监控功能.

bboss session最新版本号为:5.7.1

bboss sessison 源码地址

github: https://github.com/bbossgroups/security

bboss session 监控中心源码地址:

github: https://github.com/bbossgroups/sessiondemo

前提条件

工程必须是JavaWeb工程

集成步骤

在执行下面的集成步骤之前,必须先下载bboss session集成所需的资源文件:点击下载

下载后解压,所得目录结构如下(里面bboss框架相关的包可能没有实时更新,请到maven中央库下载更新,或者直接获取bboss session源码编译更新):

目录中包含了后续步骤需要的配置文件和jar包。

第一步 集成配置文件

Ø  如果没有resources目录,则在工程src平级目录下,创建resources,将resources下的文件拷贝到resources下,然后将新建的resources目录设置为源码目录。

Ø  如过工程存在资源目录,则将resources下的文件拷贝到自己的资源目录下即可。

下图图示了创建了一个resources-bboss的资源目录并将配置文件拷贝到新建的资源目录下:

第二步 集成框架包

Jar包直接集成:分maven工程、gradle工程、普通工程三种情况

Ø  普通工程

将lib下的jar拷贝到/WebRoot/WEB-INF/lib下。

并在加入后,将jar加入到build_path(如图)

然后检查lib版本重复,如果有重复,则去除低版本。

【特别注意】 对asm的相关jar包,如果已存在低版本,则保留低版本 ,并将asm-5.0.3.jar 删除,并移除出build_path.

Ø  Gradle集成:

将以下依赖拷贝到工程的gradle中即可:其中redis和mongodb根据需要配置

dependencies {   

    compile (

            [group: 'org.ow2.asm', name: 'asm', version: '5.0.3', transitive: false],

            [group: 'com.bbossgroups', name: 'bboss-data', version: "5.7.1", transitive: true],
         
           [group: 'com.bbossgroups.security', name: 'bboss-security', version: "5.7.1", transitive: false],

            [group: 'com.bbossgroups', name: 'bboss-soa', version: "5.7.1", transitive: false],
             [group: 'com.fasterxml.jackson.core', name: 'jackson-annotations', version: '2.9.9.2',transitive: false],

             [group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.9.9.2',transitive: false],

             [group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.9.9.2',transitive: false],

             
    )

}

 

Ø  maven集成:

将解压目录中的pom-session.xml文件包含的maven坐标合并到工程的pom.xml文件中即可,  注意将版本号修改

 <dependency>
      <groupId>com.bbossgroups</groupId>
      <artifactId>bboss-data</artifactId>
      <version>5.7.1</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.bbossgroups.security</groupId>
      <artifactId>bboss-security</artifactId>
      <version>5.7.1</version>
      <scope>compile</scope>
      <exclusions>
        <exclusion>
          <artifactId>*</artifactId>
          <groupId>*</groupId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>com.bbossgroups</groupId>
      <artifactId>bboss-soa</artifactId>
      <version>5.7.1</version>
      <scope>compile</scope>
      <exclusions>
        <exclusion>
          <artifactId>*</artifactId>
          <groupId>*</groupId>
        </exclusion>
      </exclusions>
    </dependency>

第三步 bboss session filter配置

在工程中找到web.xml,将如下文本加入到web.xml的上述文件中。

 <!—bboss session管理支持 -->

<listener>

       <listener-class>org.frameworkset.web.listener.ApplicationLifeListener</listener-class>

     </listener>

     <!—bboss session拦截过滤器,必须放在其他的过滤器前面 -->

    <filter>

         <filter-name>sessionFilter</filter-name>

         <filter-class>org.frameworkset.security.session.impl.SessionFilter</filter-class>

        <!-- 配置不需要做session拦截的请求地址模式 -->
		<init-param>
			<param-name>excludePatterns</param-name>
			<param-value>/**/*.js,/**/*.css,/**/*.gif,/**/*.png</param-value>
		</init-param>
		 <!-- 配置需要特殊拦截session请求地址模式(比如动态生成的图形校验码地址) -->
		<init-param>
			<param-name>includePatterns</param-name>
			<param-value>/validateimage.gif</param-value>
		</init-param>

    </filter>

 <!—bboss session拦截过滤器拦截地址映射配置,如果在项目中用了spring security或者其他的安全框架,则必须包含这些安全框架拦截的地址映射 -->

    
      <filter-mapping>

      <filter-name>sessionFilter</filter-name>

        <url-pattern>/*</url-pattern>

      </filter-mapping>

注意:过滤器须避免对静态资源(js,css,图片)的拦截,bboss session框架通过excludePatterns属性在filter中进行配置。如果其他安全框架(例如spring security,shiro)拦截了静态资源地址,那么bboss session也必须拦截这些地址,否则不能正确工作。为了提升性能建议bboss session框架和其他安全框架都不要拦截这些静态资源。

具体位置如下图所示,bboss sessionFilter必须放在所有过滤器的前面:

若工程中存在其他自定义的SessionListener,则参考以下文档进行相关处理改造:

http://yin-bp.iteye.com/blog/2330529

第四步 session存储配置

Bboss session支持两种session数据存储机制:mongodb和redis

Ø  Mongodb配置

/resources/mongodb.xml,配置Mongodb服务地址.

将sessionconf.xml文件中的session存储组件和统计查询组件为mondodb的实现,修改sessionStaticManager和sessionstore为:

<property name="sessionStaticManager" class="org.frameworkset.security.session.statics.MongoSessionStaticManagerImpl"/>     
      
    <property name="sessionstore" class="org.frameworkset.security.session.impl.MongDBSessionStore"/>  

Ø  Redis配置

如果采用redis则修改redis.xml

/resources/redis.xml

这个文件采用redis集群配置,如果是单机redis,则将/resources/redis.xml.single文件中的内容复制到/resources/redis.xml,redis服务器和认证配置示意图(根据实际情况修改服务器ip地址和端口以及认证口令):

redis单机配置:

redis集群配置:

然后修改sessionconf.xml文件中的session存储组件和统计查询组件为redis的实现:

<property name="sessionStaticManager" 
f:monitorScope="all" class="org.frameworkset.security.session.statics.RedisSessionStaticManagerImpl"/>	
<property name="sessionstore" class="org.frameworkset.security.session.impl.RedisSessionStore"/>

第五步 log4j日志配置

在工程中找到log4j.prpperties,将如下文本加入到log4j.properties文件中的最尾部。


#bboss session

log4j.category.com.frameworkset=DEBUG

log4j.category.org.apache=DEBUG

log4j.category.org.frameworkset=DEBUG

log4j.category.org.objectweb=DEBUG

log4j.category.org.mongodb=DEBUG

注意:生产环境请将日志级别调整为WARN

第六步 集成测试用例

将测试用的的jsp放入到webRoot目录下。

到此bboss session集成完成.可以启动应用即可测试和验证bboss session的功能.

第七步(可选)监控中心部署

将monitor\sessionmonitor.war放置到监控中心tomcat的webapps下面即可,确保war包中的WEB-INF\classes\mongodb.xml和集成到应用系统中

resources\mongodb.xml内容一致

如果采用的是redis,那么确保war包中的WEB-INF\classes\redis.xml和集成到应用系统中resources\redis.xml内容一致,同时修改war包中的

WEB-INF\classes\sessionconf.xml文件,将session存储组件和统计监控组件修改为redis的实现:

<property name="sessionStaticManager" 
f:monitorScope="all" class="org.frameworkset.security.session.statics.RedisSessionStaticManagerImpl"/>	
<property name="sessionstore" class="org.frameworkset.security.session.impl.RedisSessionStore"/>

注意监控应用的f:monitorScope属性的值必须设置为all,才能在监控中心监控和管理所有接入应用的会话数据。同时startLifeScan需要设置为true:

<property name="sessionManager" 
class="org.frameworkset.security.session.impl.SessionManager"
        init-method="init" destroy-method="destroy"> 
。。。。。   
            <!-- 指定失效session销毁线程扫描频率 ,单位:毫秒-->
            <property name="sessionscaninterval" value="3600000"/>  
            <!-- 失效session销毁线程开启开关:true 开启, false 关闭 -->
            <property name="startLifeScan" value="true"/> 
。。。。。
</property>

第八步 验证

1、 启动工程

2、 访问工程中的测试页面(假设工程名称问xtmarket2)

Ø  http://127.0.0.1:8080/xtmarket2/sessiontest.jsp

Ø  然后访问监控中心

http://127.0.0.1:8080/sessionmonitor/session/sessionManager/sessionManager.page

在监控中心,查看是否出现了自己的应用。

查看Session详情.

 

注意事项

1.无构造函数对象序列化报错问题解决方法

Caused by: java.lang.NoSuchMethodException: org.springframework.security.web.savedrequest.DefaultSavedRequest do not define a default construction.

解决方法:为这些类指定jvm原生序列化机制,以spring security框架对象为例:

org.springframework.security.providers.UsernamePasswordAuthenticationToken

org.springframework.security.web.savedrequest.DefaultSavedRequest

修改bboss序列化插件文件:resources/org/frameworkset/soa/serialconf.xml,添加内容:

<property name="org.springframework.security.providers.UsernamePasswordAuthenticationToken" magic="3" serial="org.frameworkset.soa.JDKSerial"/>
<property name="org.springframework.security.web.savedrequest.DefaultSavedRequest" magic="4" serial="org.frameworkset.soa.JDKSerial"/>

最终的配置文件serialconf.xml内容

<properties>
<property name="java.util.Locale" magic="1" serial="org.frameworkset.soa.LocaleSerial"/>
<property name="net.sf.jasperreports.engine.JasperPrint" magic="2" serial="org.frameworkset.soa.JDKSerial"/>
     <property name="org.springframework.security.providers.UsernamePasswordAuthenticationToken" magic="3" serial="org.frameworkset.soa.JDKSerial"/> 
<property name="org.springframework.security.web.savedrequest.DefaultSavedRequest" magic="4" serial="org.frameworkset.soa.JDKSerial"/>
</properties>

注意:其中的magic属性必须在保证全局唯一

Bboss序列化插件定义和配置参考文档:http://yin-bp.iteye.com/blog/2071882

2. hibernate延迟加载容器对象序列化错误问题解决方法

解决方法:升级到最新的bboss框架包和session共享包

同时对于hibernate特有的集合容器的处理,需要额外导入hibernate的序列化插件:

maven坐标:

<dependency>
    <groupId>com.bbossgroups.plugins</groupId>
    <artifactId>bboss-plugin-hibernate</artifactId>
    <version>5.0.6.2</version>
    <exclusions>
        <exclusion>
          <artifactId>*</artifactId>
          <groupId>*</groupId>
        </exclusion>
      </exclusions>
</dependency>

gradle坐标:

compile([group: 'com.bbossgroups.plugins', name: 'bboss-plugin-hibernate', version: "5.6.0", transitive: false] )

3. 404/403/500错误页面没有禁用session,导致bboss session共享失效

解决方法:404/403/500错误页面禁用session,在jsp头部添加session="false"属性

<%@ page session="false"  language="java" contentType="text/html; charset=UTF-8"%>

4. sessionFilter拦截的动态请求地址必须涵盖所有需要使用session的动态请求地址,不要遗漏特殊的地址,例如:/

 

5.session数据序列化过程产生的一些无关紧要的Exception,可以直接忽略掉,参考以下方法设置需要忽略的异常类:

指定序列化过程中可以忽略的异常信息,以换行符分割 
bboss 序列化插件配置文件/resources/org/frameworkset/soa/serialconf.xml的ignoreExceptions节点中进行设置: 

<property name="ignoreExceptions">
		<![CDATA[
		org.frameworkset.soa.IgnoreException1
		org.frameworkset.soa.IgnoreException2
		]]>
	</property>


默认忽略hibernate延迟加载异常:org.hibernate.LazyInitializationException 

更多bboss session配置和使用方法,请参考文档:

http://yin-bp.iteye.com/blog/2064662

bboss session技术交流:166471103

bboss session WX号:

展开阅读全文
打赏
2
2 收藏
分享
加载中
bboss博主

引用来自“流年末年”的评论

文档很详细,但是到了测试步骤.如果不同端口下怎么不熟监控中心
监控中心是一个独立的war应用,可以在单独的tomcat中部署:
参考【第七步(可选)监控中心部署】修改配置即可

进一步交流可以加群交流(正文末尾有群号)
2017/06/21 16:16
回复
举报
文档很详细,但是到了测试步骤.如果不同端口下怎么不熟监控中心
2017/06/21 14:37
回复
举报
更多评论
打赏
2 评论
2 收藏
2
分享
返回顶部
顶部