﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-world_eyes-随笔分类-JAVA</title><link>http://www.blogjava.net/clin8888/category/45220.html</link><description>记录点滴的地方</description><language>zh-cn</language><lastBuildDate>Fri, 04 Jun 2010 09:45:47 GMT</lastBuildDate><pubDate>Fri, 04 Jun 2010 09:45:47 GMT</pubDate><ttl>60</ttl><item><title>tomcat 二级域名 共享session 方法</title><link>http://www.blogjava.net/clin8888/archive/2010/06/04/322775.html</link><dc:creator>world_eyes</dc:creator><author>world_eyes</author><pubDate>Fri, 04 Jun 2010 09:17:00 GMT</pubDate><guid>http://www.blogjava.net/clin8888/archive/2010/06/04/322775.html</guid><wfw:comment>http://www.blogjava.net/clin8888/comments/322775.html</wfw:comment><comments>http://www.blogjava.net/clin8888/archive/2010/06/04/322775.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/clin8888/comments/commentRss/322775.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/clin8888/services/trackbacks/322775.html</trackback:ping><description><![CDATA[<p>&nbsp; &nbsp;&nbsp;
Tomcat下，不同的二级域名，Session默认是不共享的，因为Cookie名称为JSESSIONID的Cookie根域是默认是没设置的，访问
不同的二级域名，其Cookie就重新生成，而session就是根据这个Cookie来生成的，所以在不同的二级域名下生成的Session也不一样。
找到了其原因，就可根据这个原因对Tomcat在生成Session时进行相应的修改(注：本文针对Tomcat 6.0)。 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 单个web项目运行在tomcat上但是却使用多个子域名，如：</p>
<p><span>&nbsp;- site.com
</span>
<br />
<span>&nbsp;- www.site.com
</span>
<br />
<span>&nbsp;- sub1.site.com
</span>
<br />
<span>&nbsp;- sub2.site.com
</span>
<br />
<span>&nbsp;- etc.
</span>
</p>
<p>&nbsp;</p>
<p>这样会导致session的不能共享，在网络上查找的并却最快的解决办法。</p>
<p>&nbsp;</p>
<p>解决办法：</p>
<p><span>Usage:
</span>
<br />
<span>&nbsp;- compile CrossSubdomainSessionValve &amp; put it in a
.jar file
</span>
<br />
<span>&nbsp;- put that .jar file in $CATALINA_HOME/lib directory
</span>
<br />
<span>&nbsp;- include a &lt;Valve
</span>
<span>className="org.three3s.valves.CrossSubdomainSessionValve"/&gt;
in
</span>
<br />
<span>$CATALINA_HOME/conf/server.xml</span></p>
<div style="background-color: rgb(238, 238, 238); font-size: 13px; border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">package</span><span style="color: rgb(0, 0, 0);">&nbsp;org.three3s.valves;<br />
<br />
</span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);">&nbsp;java.io.</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">;<br />
<br />
</span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);">&nbsp;javax.servlet.</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">;<br />
</span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);">&nbsp;javax.servlet.http.</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">;<br />
<br />
</span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);">&nbsp;org.apache.catalina.</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">;<br />
</span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);">&nbsp;org.apache.catalina.connector.</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">;<br />
</span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);">&nbsp;org.apache.catalina.valves.</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">;<br />
</span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);">&nbsp;org.apache.tomcat.util.buf.</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">;<br />
</span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);">&nbsp;org.apache.tomcat.util.http.</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">;<br />
<br />
</span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br />
&nbsp;*&nbsp;&lt;p&gt;<br />
&nbsp;*&nbsp;Replaces&nbsp;the&nbsp;domain&nbsp;of&nbsp;the&nbsp;session&nbsp;cookie&nbsp;generated&nbsp;by&nbsp;Tomcat&nbsp;with&nbsp;a&nbsp;domain<br />
&nbsp;*&nbsp;that&nbsp;allows&nbsp;that&nbsp;session&nbsp;cookie&nbsp;to&nbsp;be&nbsp;shared&nbsp;across&nbsp;subdomains.&nbsp;This&nbsp;valve<br />
&nbsp;*&nbsp;digs&nbsp;down&nbsp;into&nbsp;the&nbsp;response&nbsp;headers&nbsp;and&nbsp;replaces&nbsp;the&nbsp;Set-Cookie&nbsp;header&nbsp;for<br />
&nbsp;*&nbsp;the&nbsp;session&nbsp;cookie,&nbsp;instead&nbsp;of&nbsp;futilely&nbsp;trying&nbsp;to&nbsp;modify&nbsp;an&nbsp;existing&nbsp;Cookie<br />
&nbsp;*&nbsp;object&nbsp;like&nbsp;the&nbsp;example&nbsp;at&nbsp;</span><span style="color: rgb(0, 128, 0); text-decoration: underline;">http://www.esus.be/blog/?p=3.</span><span style="color: rgb(0, 128, 0);">&nbsp;That&nbsp;approach&nbsp;does<br />
&nbsp;*&nbsp;not&nbsp;work&nbsp;(at&nbsp;least&nbsp;as&nbsp;of&nbsp;Tomcat&nbsp;6.0.14)&nbsp;because&nbsp;the<br />
&nbsp;*&nbsp;&lt;code&gt;org.apache.catalina.connector.Response.addCookieInternal&lt;/code&gt;&nbsp;method<br />
&nbsp;*&nbsp;renders&nbsp;the&nbsp;cookie&nbsp;into&nbsp;the&nbsp;Set-Cookie&nbsp;response&nbsp;header&nbsp;immediately,&nbsp;making<br />
&nbsp;*&nbsp;any&nbsp;subsequent&nbsp;modifying&nbsp;calls&nbsp;on&nbsp;the&nbsp;Cookie&nbsp;object&nbsp;ultimately&nbsp;pointless.<br />
&nbsp;*&nbsp;&lt;/p&gt;<br />
&nbsp;*&nbsp;<br />
&nbsp;*&nbsp;&lt;p&gt;<br />
&nbsp;*&nbsp;This&nbsp;results&nbsp;in&nbsp;a&nbsp;single,&nbsp;cross-subdomain&nbsp;session&nbsp;cookie&nbsp;on&nbsp;the&nbsp;client&nbsp;that<br />
&nbsp;*&nbsp;allows&nbsp;the&nbsp;session&nbsp;to&nbsp;be&nbsp;shared&nbsp;across&nbsp;all&nbsp;subdomains.&nbsp;However,&nbsp;see&nbsp;the<br />
&nbsp;*&nbsp;{</span><span style="color: rgb(128, 128, 128);">@link</span><span style="color: rgb(0, 128, 0);">&nbsp;getCookieDomain(Request)}&nbsp;method&nbsp;for&nbsp;limits&nbsp;on&nbsp;the&nbsp;subdomains.<br />
&nbsp;*&nbsp;&lt;/p&gt;<br />
&nbsp;*&nbsp;<br />
&nbsp;*&nbsp;&lt;p&gt;<br />
&nbsp;*&nbsp;Note&nbsp;though,&nbsp;that&nbsp;this&nbsp;approach&nbsp;will&nbsp;fail&nbsp;if&nbsp;the&nbsp;response&nbsp;has&nbsp;already&nbsp;been<br />
&nbsp;*&nbsp;committed.&nbsp;Thus,&nbsp;this&nbsp;valve&nbsp;forces&nbsp;Tomcat&nbsp;to&nbsp;generate&nbsp;the&nbsp;session&nbsp;cookie&nbsp;and<br />
&nbsp;*&nbsp;then&nbsp;replaces&nbsp;it&nbsp;before&nbsp;invoking&nbsp;the&nbsp;next&nbsp;valve&nbsp;in&nbsp;the&nbsp;chain.&nbsp;Hopefully&nbsp;this<br />
&nbsp;*&nbsp;is&nbsp;early&nbsp;enough&nbsp;in&nbsp;the&nbsp;valve-processing&nbsp;chain&nbsp;that&nbsp;the&nbsp;response&nbsp;will&nbsp;not&nbsp;have<br />
&nbsp;*&nbsp;already&nbsp;been&nbsp;committed.&nbsp;You&nbsp;are&nbsp;advised&nbsp;to&nbsp;define&nbsp;this&nbsp;valve&nbsp;as&nbsp;early&nbsp;as<br />
&nbsp;*&nbsp;possible&nbsp;in&nbsp;server.xml&nbsp;to&nbsp;ensure&nbsp;that&nbsp;the&nbsp;response&nbsp;has&nbsp;not&nbsp;already&nbsp;been<br />
&nbsp;*&nbsp;committed&nbsp;when&nbsp;this&nbsp;valve&nbsp;is&nbsp;invoked.<br />
&nbsp;*&nbsp;&lt;/p&gt;<br />
&nbsp;*&nbsp;<br />
&nbsp;*&nbsp;&lt;p&gt;<br />
&nbsp;*&nbsp;We&nbsp;recommend&nbsp;that&nbsp;you&nbsp;define&nbsp;this&nbsp;valve&nbsp;in&nbsp;server.xml&nbsp;immediately&nbsp;after&nbsp;the<br />
&nbsp;*&nbsp;Catalina&nbsp;Engine&nbsp;as&nbsp;follows:<br />
&nbsp;*&nbsp;<br />
&nbsp;*&nbsp;&lt;pre&gt;<br />
&nbsp;*&nbsp;&amp;lt;Engine&nbsp;name=&amp;quot;Catalina&amp;quot;<img src="http://www.blogjava.net/Images/dot.gif" alt="" />&amp;gt;<br />
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;lt;Valve<br />
&nbsp;*&nbsp;className=&amp;quot;org.three3s.valves.CrossSubdomainSessionValve&amp;quot;/&amp;gt;<br />
&nbsp;*&nbsp;&lt;/pre&gt;<br />
&nbsp;*&nbsp;<br />
&nbsp;*&nbsp;&lt;/p&gt;<br />
&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;CrossSubdomainSessionValve&nbsp;</span><span style="color: rgb(0, 0, 255);">extends</span><span style="color: rgb(0, 0, 0);">&nbsp;ValveBase&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;CrossSubdomainSessionValve()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">super</span><span style="color: rgb(0, 0, 0);">();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;info&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">org.three3s.valves.CrossSubdomainSessionValve/1.0</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;invoke(Request&nbsp;request,&nbsp;Response&nbsp;response)&nbsp;</span><span style="color: rgb(0, 0, 255);">throws</span><span style="color: rgb(0, 0, 0);">&nbsp;IOException,&nbsp;ServletException&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;this&nbsp;will&nbsp;cause&nbsp;Request.doGetSession&nbsp;to&nbsp;create&nbsp;the&nbsp;session&nbsp;cookie&nbsp;if<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;necessary</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request.getSession(</span><span style="color: rgb(0, 0, 255);">true</span><span style="color: rgb(0, 0, 0);">);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;replace&nbsp;any&nbsp;Tomcat-generated&nbsp;session&nbsp;cookies&nbsp;with&nbsp;our&nbsp;own</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cookie[]&nbsp;cookies&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;response.getCookies();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(cookies&nbsp;</span><span style="color: rgb(0, 0, 0);">!=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;(</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;i&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">;&nbsp;i&nbsp;</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">&nbsp;cookies.length;&nbsp;i</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cookie&nbsp;cookie&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;cookies[i];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;System.out.println("CrossSubdomainSessionValve:&nbsp;Cookie&nbsp;name&nbsp;is&nbsp;"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;+&nbsp;cookie.getName());</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(Globals.SESSION_COOKIE_NAME.equals(cookie.getName()))&nbsp;replaceCookie(request,&nbsp;response,&nbsp;cookie);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;process&nbsp;the&nbsp;next&nbsp;valve</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getNext().invoke(request,&nbsp;response);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Replaces&nbsp;the&nbsp;value&nbsp;of&nbsp;the&nbsp;response&nbsp;header&nbsp;used&nbsp;to&nbsp;set&nbsp;the&nbsp;specified<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;cookie&nbsp;to&nbsp;a&nbsp;value&nbsp;with&nbsp;the&nbsp;cookie's&nbsp;domain&nbsp;set&nbsp;to&nbsp;the&nbsp;value&nbsp;returned&nbsp;by<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;code&gt;getCookieDomain(request)&lt;/code&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128, 128, 128);">@param</span><span style="color: rgb(0, 128, 0);">&nbsp;request<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128, 128, 128);">@param</span><span style="color: rgb(0, 128, 0);">&nbsp;response<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128, 128, 128);">@param</span><span style="color: rgb(0, 128, 0);">&nbsp;cookie<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cookie&nbsp;to&nbsp;be&nbsp;replaced.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">protected</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;replaceCookie(Request&nbsp;request,&nbsp;Response&nbsp;response,&nbsp;Cookie&nbsp;cookie)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;copy&nbsp;the&nbsp;existing&nbsp;session&nbsp;cookie,&nbsp;but&nbsp;use&nbsp;a&nbsp;different&nbsp;domain</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cookie&nbsp;newCookie&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;Cookie(cookie.getName(),&nbsp;cookie.getValue());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;System.out.println("CrossSubdomainSessionValve:&nbsp;CookiePath&nbsp;is&nbsp;"&nbsp;+<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;cookie.getPath());</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(cookie.getPath()&nbsp;</span><span style="color: rgb(0, 0, 0);">!=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">)&nbsp;newCookie.setPath(cookie.getPath());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;domain&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;getCookieDomain(request);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(</span><span style="color: rgb(0, 0, 0);">!</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">.piaoyoo.com</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">.equals(domain))&nbsp;domain&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;request.getServerName();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;System.out.println("CrossSubdomainSessionValve:&nbsp;CookieDomain&nbsp;is&nbsp;"&nbsp;+<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;domain);</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newCookie.setDomain(domain);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newCookie.setMaxAge(cookie.getMaxAge());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newCookie.setVersion(cookie.getVersion());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;System.out.println("CrossSubdomainSessionValve:&nbsp;CookieComment&nbsp;is&nbsp;"&nbsp;+<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;cookie.getComment());</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(cookie.getComment()&nbsp;</span><span style="color: rgb(0, 0, 0);">!=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">)&nbsp;newCookie.setComment(cookie.getComment());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newCookie.setSecure(cookie.getSecure());<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;if&nbsp;the&nbsp;response&nbsp;has&nbsp;already&nbsp;been&nbsp;committed,&nbsp;our&nbsp;replacement&nbsp;strategy<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;will&nbsp;have&nbsp;no&nbsp;effect</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(response.isCommitted())&nbsp;System.out.println(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Error&nbsp;CrossSubdomainSessionValve:&nbsp;response&nbsp;was&nbsp;already&nbsp;committed!</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;find&nbsp;the&nbsp;Set-Cookie&nbsp;header&nbsp;for&nbsp;the&nbsp;existing&nbsp;cookie&nbsp;and&nbsp;replace&nbsp;its<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;value&nbsp;with&nbsp;new&nbsp;cookie</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MimeHeaders&nbsp;headers&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;response.getCoyoteResponse().getMimeHeaders();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;(</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;i&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">,&nbsp;size&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;headers.size();&nbsp;i&nbsp;</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">&nbsp;size;&nbsp;i</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(headers.getName(i).equals(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Set-Cookie</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">))&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBytes&nbsp;value&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;headers.getValue(i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(value.indexOf(cookie.getName())&nbsp;</span><span style="color: rgb(0, 0, 0);">&gt;=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuffer&nbsp;buffer&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;StringBuffer();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServerCookie.appendCookieValue(buffer,&nbsp;newCookie.getVersion(),&nbsp;newCookie.getName(),&nbsp;newCookie.getValue(),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newCookie.getPath(),&nbsp;newCookie.getDomain(),&nbsp;newCookie.getComment(),&nbsp;newCookie.getMaxAge(),&nbsp;newCookie<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getSecure());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;System.out.println("CrossSubdomainSessionValve:&nbsp;old&nbsp;Set-Cookie&nbsp;value:&nbsp;"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;+&nbsp;value.toString());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;System.out.println("CrossSubdomainSessionValve:&nbsp;new&nbsp;Set-Cookie&nbsp;value:&nbsp;"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;+&nbsp;buffer);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;System.out.println("-----------------------------");</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value.setString(buffer.toString());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Returns&nbsp;the&nbsp;last&nbsp;two&nbsp;parts&nbsp;of&nbsp;the&nbsp;specified&nbsp;request's&nbsp;server&nbsp;name<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;preceded&nbsp;by&nbsp;a&nbsp;dot.&nbsp;Using&nbsp;this&nbsp;as&nbsp;the&nbsp;session&nbsp;cookie's&nbsp;domain&nbsp;allows&nbsp;the<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;session&nbsp;to&nbsp;be&nbsp;shared&nbsp;across&nbsp;subdomains.&nbsp;Note&nbsp;that&nbsp;this&nbsp;implies&nbsp;the<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;session&nbsp;can&nbsp;only&nbsp;be&nbsp;used&nbsp;with&nbsp;domains&nbsp;consisting&nbsp;of&nbsp;two&nbsp;or&nbsp;three&nbsp;parts,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;according&nbsp;to&nbsp;the&nbsp;domain-matching&nbsp;rules&nbsp;specified&nbsp;in&nbsp;RFC&nbsp;2109&nbsp;and&nbsp;RFC<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;2965.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;p&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Examples:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;/p&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;ul&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;li&gt;foo.com&nbsp;=&gt;&nbsp;.foo.com&lt;/li&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;li&gt;www.foo.com&nbsp;=&gt;&nbsp;.foo.com&lt;/li&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;li&gt;bar.foo.com&nbsp;=&gt;&nbsp;.foo.com&lt;/li&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;li&gt;abc.bar.foo.com&nbsp;=&gt;&nbsp;.foo.com&nbsp;-&nbsp;this&nbsp;means&nbsp;cookie&nbsp;won't&nbsp;work&nbsp;on<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;abc.bar.foo.com!&lt;/li&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;/ul&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128, 128, 128);">@param</span><span style="color: rgb(0, 128, 0);">&nbsp;request<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;provides&nbsp;the&nbsp;server&nbsp;name&nbsp;used&nbsp;to&nbsp;create&nbsp;cookie&nbsp;domain.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128, 128, 128);">@return</span><span style="color: rgb(0, 128, 0);">&nbsp;the&nbsp;last&nbsp;two&nbsp;parts&nbsp;of&nbsp;the&nbsp;specified&nbsp;request's&nbsp;server&nbsp;name<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;preceded&nbsp;by&nbsp;a&nbsp;dot.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">protected</span><span style="color: rgb(0, 0, 0);">&nbsp;String&nbsp;getCookieDomain(Request&nbsp;request)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;cookieDomain&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;request.getServerName();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String[]&nbsp;parts&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;cookieDomain.split(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">\\.</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(parts.length&nbsp;</span><span style="color: rgb(0, 0, 0);">&gt;=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">)&nbsp;cookieDomain&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;parts[parts.length&nbsp;</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">]&nbsp;</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">&nbsp;parts[parts.length&nbsp;</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">&nbsp;cookieDomain;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;String&nbsp;toString()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">CrossSubdomainSessionValve[container=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">&nbsp;container.getName()&nbsp;</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">]</span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</span></div>
<p><br />
</p>
<p><span><br />
</span>
</p>
<img src ="http://www.blogjava.net/clin8888/aggbug/322775.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/clin8888/" target="_blank">world_eyes</a> 2010-06-04 17:17 <a href="http://www.blogjava.net/clin8888/archive/2010/06/04/322775.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>