一、创建项目,导入依赖
<!-- 引入springboot整合redis的依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- spring 引入 session 信息存储到redis里的依赖包 -->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
<!-- 配置类中需要用到的依赖 -->
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.4</version>
</dependency>
二、添加yaml配置文件
spring:
session:
store-type: redis
timeout: 300
# redis:
# namespace: spring:session
redis:
host: 10.70.20.248
port: 6379
database: 0
# redis设置了访问密码
password: ******
server:
port: 8080
# 多个监听端口
additionalPorts: 9090
三、添加自定义的config类
package com.pygl.springboot.config;
import org.apache.catalina.connector.Connector;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.ArrayList;
import java.util.List;
@Configuration
public class TomcatConfig {
@Value("${server.additionalPorts}")
private String additionalPorts;
@Bean
public TomcatServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
Connector[] additionalConnectors = this.additionalConnector();
if (additionalConnectors != null && additionalConnectors.length > 0) {
tomcat.addAdditionalTomcatConnectors(additionalConnectors);
}
return tomcat;
}
private Connector[] additionalConnector() {
if (StringUtils.isBlank(this.additionalPorts)) {
return null;
}
// 端口按,分割
String[] ports = this.additionalPorts.split(",");
List<Connector> result = new ArrayList<>();
for (String port : ports) {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(Integer.parseInt(port));
result.add(connector);
}
return result.toArray(new Connector[] {});
}
}
四、定义Controller类
package com.pygl.springboot.handler;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
@RestController
public class HelloController {
@RequestMapping("/login")
public Map<String,Object> login(HttpServletRequest request) {
HttpSession httpSession = request.getSession();
// 设置session中的值
httpSession.setAttribute("username", "lxj" + System.currentTimeMillis());
Map<String,Object> rtnMap = new HashMap<>();
Enumeration<String> attributeNames = request.getSession().getAttributeNames();
while(attributeNames.hasMoreElements()){
String name = attributeNames.nextElement();
rtnMap.put(name, httpSession.getAttribute(name));
}
rtnMap.put("sessionId", httpSession.getId());
return rtnMap;
}
@RequestMapping("/getsession")
public Object getSession(HttpServletRequest request) {
HttpSession httpSession = request.getSession();
Map<String,Object> rtnMap = new HashMap<>();
Enumeration<String> attributeNames = request.getSession().getAttributeNames();
while(attributeNames.hasMoreElements()){
String name = attributeNames.nextElement();
rtnMap.put(name, httpSession.getAttribute(name));
}
int count;
try {
count = Integer.parseInt(String.valueOf(httpSession.getAttribute("count")));
count++;
}catch (NumberFormatException e){
count = 1;
}
httpSession.setAttribute("count",count+"");
rtnMap.put("sessionId", httpSession.getId());
return rtnMap;
}
}
五、在启动类添加注解
@EnableRedisHttpSession
六、修改Redis配置
1、关闭自身防护,允许外部链接
2、关闭防火墙
# 关闭防火墙(工作慎用)
systemctl stop firewalld