springboot+redis單點登錄session共享

單點登錄(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共享簡單的小例子。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章