springSession+redis在项目中的使用

   1、前言,session一直都是我们做集群时需要解决的一个难题,过去我们可以从serlvet容器上解决,比如开源servlet容器-tomcat提供的tomcat-redis-session-manager、memcached-session-manager,现在我们可以通过springSession实现session在集群中的共享。

    Spring Session提供了一个用于管理用户会话信息的API和实现,同时也支持集群会话而不受限于特定于应用程序容器的解决方案。

   2、支持功能 

     1)、springSession支持将session存储到第三方存储容器,如redis、mysql中,框架提供了redis、jdbc等多种存储session的容器的方式。 

     2)、多个浏览器会话 - Spring Session支持在单个浏览器实例(即类似于Google的多个经过身份验证的帐户)中管理多个用户的会话,同一个浏览器同一个网站,支持多个session共享。 

      3)、Restful API,Spring Session允许在头文件中提供会话ID以使用RESTful API

      4)、WebSocket - 提供HttpSession在接收WebSocket消息时保持活动的能力。   

    3、项目集成springSession,以springboot为例,使用redis存储session,更多请参考:https://docs.spring.io/spring-session/docs/1.3.1.RELEASE/reference/html5/

    1)、添加pom         

<dependency>
	<groupId>org.springframework.session</groupId>
	<artifactId>spring-session-data-redis</artifactId>
</dependency>

     2)、配置springsession   

@Configuration
//session有效时长4小时
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 14400)
public class SpringSessionConfig {

}

    3)、springSession的sessionID传递方式接口 

           1.cookie方式 :CookieHttpSessionStrategy

           2.http header 方式:HeaderHttpSessionStrategy

           默认的是以cookie方式实现

    4)、基于默认的sessionId传递方式,添加cookie配置    

#cookie名称
server.session.cookie.name=MY_PROJECT_SESSION
#cookie会话的域
server.session.cookie.domain=regulus.com
#会话cookie的路径,基于根路径
server.session.cookie.path=/

   更多配置   

server.session.cookie.comment = #注释会话cookie。
server.session.cookie.domain = #会话cookie的域。
server.session.cookie.http-only =#“HttpOnly”标志为会话cookie。
server.session.cookie.max-age = #会话cookie的最大年龄(以秒为单位)。
server.session.cookie.name = #会话cookie名称。
server.session.cookie.path = #会话cookie的路径。
server.session.cookie.secure = #“Secure”标志为会话cookie。
server.session.persistent = false #在重新启动之间持续会话数据。
server.session.store-dir = #用于存储会话数据的目录。
server.session.timeout = #会话超时(秒)。
server.session.tracking-modes =#会话跟踪模式(以下一个或多个:“cookie”,“url”,“ssl”)。

   5)、springSession基于cookie的配置    

@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 14400)
public class SpringSessionConfig {

    @Bean
    public CookieSerializer cookieSerializer(ServerProperties serverProperties) {
        Cookie cookie = serverProperties.getSession().getCookie();
        DefaultCookieSerializer bean = new DefaultCookieSerializer();
        if (cookie.getMaxAge() != null) {
            bean.setCookieMaxAge(cookie.getMaxAge());
        }
        if (cookie.getName() != null) {
            bean.setCookieName(cookie.getName());
        }
        if (cookie.getPath() != null) {
            bean.setCookiePath(cookie.getPath());
        }
        if (cookie.getDomain() != null) {
            bean.setDomainName(cookie.getDomain());
        }
        if (cookie.getHttpOnly() != null) {
            bean.setUseHttpOnlyCookie(cookie.getHttpOnly());
        }
        if (cookie.getSecure() != null) {
            bean.setUseSecureCookie(cookie.getSecure());
        }
        return bean;
    }

}

   4、基于以上配置,就可以在项目中,使用springSession了,用法和session的用法一致

   

猜你喜欢

转载自gsshijun.iteye.com/blog/2410300