struts2+springsecurity+spring-session-data-redis使用redis存储session

springsecurity做权限验证,采用默认的session管理,在系统重新部署启动之后,之前登录的用户session无法被保存,需要用户重新登录,这里使用redis来做session存储,系统重启之后,session还在,无需重新登录。

使用redis做session存储,本身配置比较简单,但是这里和struts2结合,就需要注意。

springSessionRepositoryFilter的映射配置需要在springsecurity和struts2的filter前面。要不然,还是不会生效。

首先需要增加spring-session-data-redis的依赖。


	org.springframework.session
	spring-session-data-redis
	1.3.5.RELEASE

其次,需要配置redis连接和redis session相关的bean,让spring去管理redis的连接。

spring-redis.xml




    
         
         
         
         
    
    
    
         
         
         
    
    
    
        
    
    

在spring-security.xml配置文件中,增加redis session相关的配置。




    
    
         
            
                 
                    
                 
                 
                 
                     
                 
            
         
    
    
    
        
        
        
        
        
        
    
    
    
    
        
           
        
    

web.xml配置的详细配置:



    ssh
	
		contextConfigLocation
		classpath:spring.xml,classpath:spring-security.xml
	
	
		org.springframework.web.context.ContextLoaderListener
	
	
	      ssh
	      org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
	 	 
	
	       springSecurityFilterChain
	       org.springframework.web.filter.DelegatingFilterProxy
	
	
	       springSessionRepositoryFilter
	       org.springframework.web.filter.DelegatingFilterProxy
	
	
	      springSessionRepositoryFilter
	      /*
	
	
	      springSecurityFilterChain
	      /*
			
	
	      ssh
	      /*
	

这里尤其要注意三个filter的顺序,springsession-springsecurity-struts2。这里虽然springSessionRepositoryFilter和springSecurityFilterChain对应的filter-class是一个,但是还是需要配置两遍。

经过这样的配置,无需编写java代码,就可以实现redis存储session,项目重新部署,用户会无感知。无需重新登录。

用户登录之后存储在redis中的session相关的信息:

struts2+springsecurity+spring-session-data-redis使用redis存储session_第1张图片

完整项目代码地址:https://github.com/buejee/ssh.git 

你可能感兴趣的:(java,struts2,springsecurity,spring,redis,session)