版权声明:未经授权,不得转载。 https://blog.csdn.net/soulsda/article/details/83687441
1.首先要引入jar包
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
<version>${spring.session.version}</version>
</dependency>
1.1 jar包的版本目前是
<spring.session.version>1.3.1.RELEASE</spring.session.version>
2.根据官方文档查看所要配置的config ,我起名为HttpSessionConfig
2.1 :首先在类名上打上注解
通用的配置注解
@Configuration
声明了基于reids管理session
@EnableRedisHttpSession
//默认的过期时间是1800秒和普通session相同,可以自己设置时间
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 1800)
2.2 :策略
@Bean
public HttpSessionStrategy httpSessionStrategy(){
return new HeaderHttpSessionStrategy();
}
2.3 :配置redis连接工厂
@Bean
public JedisConnectionFactory connectionFactory(){
JedisConnectionFactory connectionFactory = new JedisConnectionFactory();
String redisHost = parameters.getRedisNode().split(":")[0];
int redisPort = Integer.valueOf(parameters.getRedisNode().split(":")[1]);
connectionFactory.setTimeout(2000);
connectionFactory.setHostName(redisHost);
connectionFactory.setPort(redisPort);
connectionFactory.setPassword(parameters.getRedisAuth());
return connectionFactory;
}
3.完整demo
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
import org.springframework.session.web.http.HeaderHttpSessionStrategy;
import org.springframework.session.web.http.HttpSessionStrategy;
@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 3600)
public class HttpSessionConfig {
@Autowired
private Parameters parameters;
@Bean
public HttpSessionStrategy httpSessionStrategy(){
return new HeaderHttpSessionStrategy();
}
@SuppressWarnings("Duplicates")
@Bean
public JedisConnectionFactory connectionFactory(){
JedisConnectionFactory connectionFactory = new JedisConnectionFactory();
String redisHost = parameters.getRedisNode().split(":")[0];
int redisPort = Integer.valueOf(parameters.getRedisNode().split(":")[1]);
connectionFactory.setTimeout(2000);
connectionFactory.setHostName(redisHost);
connectionFactory.setPort(redisPort);
// connectionFactory.setPassword(parameters.getRedisAuth());
return connectionFactory;
}
}
4.用法 :和普通session用法相同
//简单举例
@RequestMapping("login")
public ApiResult login(@Valid User user, HttpSession session){
ApiResult resp = new ApiResult(Constants.RESP_STATUS_OK,"登录成功");
UserElement ue = userService.login(user);
if(ue != null){
if (session.getAttribute(Constants.REQUEST_USER_SESSION) == null){
session.setAttribute(Constants.REQUEST_USER_SESSION,ue);
}
resp.setData(ue);
}
return resp;
}
5:区别
4.1:和普通session在于,将session存在redis中,分布式环境下请求redis服务便可做到分布式的session管理
4.2:顺便说一下,parameters是取配置文件中配置好的redis连接信息,但这是另一项技术,这里不做赘述。
@Autowired
private Parameters parameters;