spring session作用域 详细用法
时间: 2023-10-30 08:07:24 浏览: 116
Spring Session 是一个用于管理 Web 应用会话的框架,它提供了一种将会话数据存储到外部存储器中的方式,从而实现多个 Web 应用之间共享会话数据的功能。Spring Session 提供了以下几种作用域:
1. HttpSession:这是 Spring Session 最基本的作用域,它与 Servlet API 中的 HttpSession 相对应,可以使用 HttpSession 存储和访问会话数据。
2. WebSocket:Spring Session 还支持 WebSocket 会话,它提供了一个 WebSocketSession 作用域,可以使用它来存储和访问 WebSocket 会话数据。
3. Reactive Web:Spring Session 还支持 Reactive Web 应用,它提供了一个 WebSession 作用域,可以使用它来存储和访问 Reactive Web 应用的会话数据。
4. Servlet API:除了 HttpSession 之外,Spring Session 还支持使用 Servlet API 中的其他作用域存储和访问会话数据,比如 ServletContext、HttpServletRequest 等。
Spring Session 的使用方式非常简单,只需要在应用中引入相应的依赖,然后在配置文件中配置会话存储方式即可。例如,使用 Redis 存储会话数据的配置如下:
```yaml
spring:
session:
store-type: redis
redis:
namespace: myapp
```
在代码中,可以通过注入 HttpSession、WebSocketSession 或 WebSession 等作用域来访问会话数据,例如:
```java
@Controller
public class MyController {
@GetMapping("/my-page")
public String myPage(HttpSession session) {
session.setAttribute("my-data", "Hello, World!");
return "my-page";
}
}
```
```java
@Component
public class MyWebSocketHandler extends TextWebSocketHandler {
@Override
public void handleTextMessage(WebSocketSession session, TextMessage message) {
session.getAttributes().put("my-data", message.getPayload());
}
}
```
```java
@Component
public class MyWebFluxHandler {
public Mono<ServerResponse> handleRequest(ServerRequest request) {
return request.session()
.doOnNext(session -> session.getAttributes().put("my-data", "Hello, World!"))
.flatMap(session -> ServerResponse.ok().build());
}
}
```
总之,Spring Session 提供了一种方便的方式来管理 Web 应用的会话数据,使得多个应用之间可以共享会话数据,同时也提供了多种作用域来适应不同类型的应用。
阅读全文