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号: