單點登錄(SSO)的定義是在多個應用系統中,用戶只需要登錄一次就可以訪問所有相互信任的應用系統。
現在就是用springboot和redis來完成session共享。
1.導入相關依賴。(web和redis相關)
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
</dependencies>
2.配置redis
@Configuration
@EnableRedisHttpSession
public class RedisSessionConfig {
}
其中@EnableRedisHttpSession註解,開啓redis集中式session管理,把所有的session都存放到了redis中
3.配置application.yml文件,端口的設置以及redis的連接地址和端口號配置
server:
port: 8080
spring:
redis:
host: 192.168.56.150
port: 6379
爲了模擬共享,需要開啓另個服務,server端口號可以設置8081,其他保持不變
server:
port: 8081
spring:
redis:
host: 192.168.56.150
port: 6379
4.控制層代碼
@RestController
@RequestMapping("/admin")
public class RedisController {
@GetMapping("/setSessionId")
public String setredisResult(HttpServletRequest request){
HttpSession session = request.getSession();
session.setAttribute("sessionId","100");
return "設置ok...";
}
@GetMapping("/getSessionId")
public String redisResult(HttpServletRequest request) {
HttpSession session = request.getSession();
String sessid = (String) session.getAttribute("sessionId");
return "sessionId:"+sessid;
}
}
5.運行server8080和server8081
訪問http://localhost:8080/admin/setSessionId 設置sessionId
查看redis,可以看到redis中已經存在springsession相關數據,此時也可以看到設置的sessionId
訪問另一個服務http://localhost:8081/admin/getSessionId
不同服務sessionId共享成功。
以上就是session共享簡單的小例子。