欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

springSession+redis在项目中的使用

程序员文章站 2022-07-01 22:41:11
...

   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的用法一致

   

相关标签: springSession redis