区别于官方demo,这里介绍的是集群项目的session共享,以下是项目属性:
项目名:testbboss1
应用服务器:tomcat(两个7.0)
说明:以下文章会提及依赖jar配置文件等,在这里不做详细描述,文章最后我会挂上gitbug地址,有需要的可以自行去看看。
mongoDB安装启动这里不做细说了,以前说过或者百度下也行,mongoDB启动后放着不管,启动eclipse。
新建web项目,加入相关依赖jar。
在web.xml里加上一个fiflter
<filter>
<filter-name>sessionFilter</filter-name>
<filter-class>org.frameworkset.security.session.impl.SessionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sessionFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
若需要监控继续添加一个servlet(以下完整)
<filter>
<filter-name>sessionFilter</filter-name>
<filter-class>org.frameworkset.security.session.impl.SessionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sessionFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>sessionFilter</filter-name>
<url-pattern>*.page</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>mvcdispather</servlet-name>
<servlet-class>org.frameworkset.web.servlet.DispatchServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<!--如果有多个目录需要加载,请用,号分隔 -->
<param-value>/WEB-INF/conf/bboss-*.xml</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvcdispather</servlet-name>
<url-pattern>*.page</url-pattern>
</servlet-mapping>
在src下添加以下配置文件:
log4j.properties(略)
mongodb.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:27017
</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>
sessionconf.xml
<properties>
<!-- 令牌服务配置
(long sessionTimeout, Object sessionStore,
String cookiename, boolean httponly,
long cookieLiveTime,String[] listeners)
-->
<property name="sessionManager" class="org.frameworkset.security.session.impl.SessionManager"
init-method="init" destroy-method="destroy">
<property name="sessionTimeout" value="3600000"/>
<property name="sessionstore" refid="attr:sessionstore"/>
<!-- <property name="sessionstore" value="session"/>-->
<property name="cookiename" value="b_sessionid"/>
<property name="httpOnly" value="true"/>
<property name="secure" value="false"/>
<!--
应用编码,如果没有指定appcode值默认为应用上下文
appcode的作用:当所有的应用上下文为“/”时,用来区分后台统计的会话信息
如果应用上下文为“/”时,appcode为ROOT
-->
<!--<property name="appcode" value="10_25_192_142_pdp"/>-->
<property name="sessionlisteners" value="org.frameworkset.security.session.impl.NullSessionListener"/>
</property>
<property name="sessionStaticManager" class="org.frameworkset.security.session.statics.MongoSessionStaticManagerImpl"/>
<property name="sessionstore" class="org.frameworkset.security.session.impl.MongDBSessionStore"/>
</properties>
注意这里可配置需要共享属性,默认是共享全部属性。
配置至此完毕,若需要监控,则在web路径下继续添加相关文件夹及jsp页面(详见代码)
简单说下流程:
在浏览器中访问第一个项目,bboss拦截到请求,获取session的id,将id作为cookie回传至客户端并且将session序列化保存到mongoDB中。访问第二个项目,请求带有session_id,bboss根据id从mongoDB中获取session,遍历session将属性复制保存到新seesion中(可配置只共享一部分属性),从而达到seesion共享的功能,本质上并不是公用一个session而是通过属性拷贝达到一种伪一致的session。
这里是项目地址:https://github.com/shang7053/base/tree/master/testbboss1