import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
import org.springframework.session.web.http.DefaultCookieSerializer;
import org.springframework.session.web.http.CookieSerializer;
@Configuration
@EnableRedisHttpSession
public class RedisSessionConfig {
@Autowired
public void configureSession(CookieSerializer cookieSerializer) {
// 自定义cookie的相关配置
cookieSerializer.setCookieName("SESSION_ID");
cookieSerializer.setCookiePath("/");
cookieSerializer.setDomainNamePattern("^.+?\\.(\\w+\\.[a-z]+)$");
}
@Bean
public CookieSerializer cookieSerializer() {
return new DefaultCookieSerializer();
}
}
上述代码通过@EnableRedisHttpSession注解启用Redis作为session存储,并自定义了cookie的相关配置。可以根据需要进行修改。
在项目中使用Redis作为session存储后,可以通过注入HttpSession对象来访问和操作session中的数据。以下是一个简单的示例
import javax.servlet.http.HttpSession;
@RestController
public class SessionController {
@Autowired
private HttpSession session;
@GetMapping("/setSession")
public void setSession() {
session.setAttribute("key", "value");
}
@GetMapping("/getSession")
public String getSession() {
String value = (String) session.getAttribute("key");
return value != null ? value : "Session not found";
}
}
在上述示例中,setSession方法用于设置session的值,getSession方法用于获取session的值。
需要注意的是,为了使session能够跨域名共享,需要设置cookie的domain属性为公共域名。在上述示例中,通过设置DefaultCookieSerializer的domainNamePattern属性,可以将cookie的domain属性设置为公共域名。请根据实际情况进行调整。