使用spring-session、redeis实现跨二级域名单点登录

提示:目前了解到的,此方式只能实现父级域名一致的子域名间单点登录,如用户登录了a.xx.com,再访问b.xx.com/xxx.do,则不需要再登录。

单点登录(个人理解,如有不足,请补充):由多个服务组成的一组服务,登录其中一个服务后,访问其他服务的受限资源,不再需要登录

实现方式(个人理解,如有不足,请补充):

1、共享session:本文基于此,只有让不同的tomcat共用一个session对象,才真正实现了session共享,从而实现单点

2、放弃session:引入认证中心,每次访问受限资源,携带token

3、只是单纯共享登录状态:重写ValveBase ,见http://blog.csdn.net/luka2008/article/details/38385703/

准备工作:

1、新建web工程(或者已经使用session的既有工程),基于maven

2、准备redis实例

3、修改pom,加入如下dependency

		
	      redis.clients
	      jedis
	      2.5.2
	    
	    
	      org.springframework.data
	      spring-data-redis
	      1.7.1.RELEASE
	    
	    
	      org.springframework.session
	      spring-session-data-redis
	      1.2.0.RELEASE
	    
	    
	      org.apache.commons
	      commons-pool2
	      2.2
	    

4、新建spring-session.xml,写入redis配置




    
    
    

    
    
         
        
        
        
    

    
        
        
        
        
    

    
        
          
	          
	      
	      
	          
	      
	      
	          
	      
	      
	          
	     
    

    
    
        
        
    

5、修改web.xml,加入如下片段(我的工程是基于spring mvc、再集成spring-seesion)

注意:

springSessionRepositoryFilter必须放在所有filter的最前面

  
    contextConfigLocation
    classpath:spring.xml,classpath:spring-session.xml
  
  
    springSessionRepositoryFilter
    org.springframework.web.filter.DelegatingFilterProxy
  
  
    springSessionRepositoryFilter
    /*
    REQUEST
    ERROR
  
6、修改本地hosts文件,将127.0.0.1分别绑定a.xx.com、b.xx.com

注意,此处的父级域名xx.com要和spring-seesion.xml中,defaultCookieSerializer的domainName属性值配成一个,访问时,url也要用配置的对应项访问

情况1:domainName配成.xx.com,则验证时,url输入a.xx.com

情况2:domainName配成127.0.0.1,则验证时,url输入127.0.0.1

情况3:domainName配成localhost,则验证时,url输入localhost

这一点好多文章都没有写,这和session的创建和匹配机制有关,只有严格匹配了域名、path、访问路径才不会重复创建session,详细了解参考:跨域(二级域)session共享

7、验证

访问a.xx.com并登录,然后访问b.xx.com/xxx.do,则可正常访问。

总结:

优点:对原有系统代码零侵入,只需修改配置,便可实现单点登录

不足:不能实现跨顶级域名(设计之初,就没有往这个方向考虑大约)

刚开始研究没多久,如有不妥之处,请多多拍砖。

能够配置成功,参考了如下几篇文章,多谢多谢。

Spring-session & redis 子域名共享session:http://blog.csdn.net/beflyabot/article/details/51449315

SPRING SESSION实现单点登录 :http://blog.csdn.net/moxies8090/article/details/53355244

 跨域(二级域)session共享:http://blog.csdn.net/luka2008/article/details/38385703/

你可能感兴趣的:(单点登录)