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的用法一致
上一篇: 经常喝决明子好吗
下一篇: 常练太极改善上班族失眠症状