bboss会话共享

    区别于官方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

    

    

你可能感兴趣的:(bboss会话共享)