在文章七里面有介绍session共享,不过只是在一个域名及其他子域间共享。有时候,我们需要在多个一级域名共享登录的session。当然,用shiro-cas是一个很不错的解决方法,应该也是大部分人使用的方法。不过因为种种原因,并没有选择shiro-cas的方式,就使用了其他方式代替,思路也来自shiro-cas。比如有www.a.com,www.b.com两个域名需要共享session,并且www.b.com域名下的session是主,登录在www.b.com域名下,www.a.com域名下的session需要取www.b.com域名下的session。大概画一个图:
在www.a.com中加一个filter,用于重定向到www.b.com,取得b域名下的sessionId。代码贴出来:
1 | import javax.servlet.ServletRequest; |
1 |
|
然后,将CasFilter交由spring 管理
1 | <bean id="casFilter" class="com.xxx.security.interfaces.filter.CasFilter"> |
在shiro的配置文件中,配置CasFilter拦截那些请求,大概如下:
1 | <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> |
整个过程,目的只有一个,就是让www.a.com,www.b.com两个域名的cookie共享。当然,cookie跨域共享方式很多,网上也有很多资料,包括通过iframe,js等方式。本文的这种方法,只是借仿shiro-cas的重定向方式,不过也有所不同。本文分享到这里,希望读者有更好的方式分享。