文档章节

bboss session集成权威指南

bboss
 bboss
发布于 2016/10/15 13:09
字数 2196
阅读 2469
收藏 1

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

集成目标

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

bboss session最新版本号为:5.0.9

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.1.8", transitive: true],
         
           [group: 'com.bbossgroups.security', name: 'bboss-security', version: "5.09", transitive: false],

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

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

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

             
    )

}

 

Ø  maven集成:

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

 <dependency>
      <groupId>com.bbossgroups</groupId>
      <artifactId>bboss-data</artifactId>
      <version>5.1.8</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.bbossgroups.security</groupId>
      <artifactId>bboss-security</artifactId>
      <version>5.0.9</version>
      <scope>compile</scope>
      <exclusions>
        <exclusion>
          <artifactId>*</artifactId>
          <groupId>*</groupId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>com.bbossgroups</groupId>
      <artifactId>bboss-soa</artifactId>
      <version>5.1.8</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.0.6.2", 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号:

© 著作权归作者所有

bboss

bboss

粉丝 125
博文 62
码字总数 71419
作品 9
长沙
程序员
私信 提问
加载中

评论(2)

bboss
bboss 博主

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

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

进一步交流可以加群交流(正文末尾有群号)
流年末年
流年末年
文档很详细,但是到了测试步骤.如果不同端口下怎么不熟监控中心
bboss session v5.0.3.8 发布,会话共享和监控框架

bboss session v5.0.3.8 发布,bboss session为web应用提供session共享和 session监控管理功能。 主要功能特性: 支持集群session共享 支持跨域跨应用session共享 提供强大的统一session管理...

bboss
2018/02/11
577
2
bboss session v5.0.2 发布,共享框架

bboss session 共享框架 v5.0.2 发布! 功能改进及问题修复: 新增bboss-ticket模块:基于jwt,提供跨域跨应用SSO解决方案,采用bboss session管理用户凭证并且支持单点登入和登出,使用参考...

bboss
2016/12/05
1K
4
bboss session redis插件使用指南

bboss session 采用redis存储会话功能介绍,bboss session在线演示地址: http://sessionmonitor.bbossgroups.com/ bboss session支持mongodb和redis两种方式存储web应用的session数据,二者在...

bboss
2016/03/29
0
0
bboss session 共享框架 v4.10.1 发布

bboss session共享框架 v4.10.1 发布 功能改进及新增功能特性: 1.升级最新bboss框架到v4.10.1 2.搭建session共享在线试用环境: http://session.bbossgroups.com/ 3.增强session监控功能: ...

bboss
2015/12/22
1K
1
bboss session 共享框架 v5.0.1 发布

bboss session共享框架 v5.0.1 发布 Demo演示 http://session.bbossgroups.com/ 监控演示 http://sessionmonitor.bbossgroups.com/session/sessionManager/sessionManager.page 功能改进及新......

bboss
2016/07/25
2.3K
12

没有更多内容

加载失败,请刷新页面

加载更多

java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
今天
6
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
5
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
15
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
16
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部