如何在Spring WebFlux中使用WebSession来保存数据?

时间:2017-11-21 06:18:05

标签: spring spring-webflux

我正在尝试使用Spring WebFlux5.0.1和Spring boot v2.0 M6版本开发Web应用程序。要求是在会话中存储对象并在后续页面/控制器中使用它。

控制器

@Controller
public class TestController {

    @RequestMapping("/")
    public Mono<String> testSession(Model model,ServerWebExchange swe){
        Mono<WebSession> session = swe.getSession();
        System.out.println("In testSession "+session);

        model.addAttribute("account", new Account());
        return Mono.just("account");
    }
}

我能从ServerWebExchange获取Websession对象,但我没有看到设置/获取属性的方法

需要帮助以了解如何在被动世界中使用WebSession对象

2 个答案:

答案 0 :(得分:0)

这是你想做的吗?

swe.getSession().map(
    session -> { 
        session.getAttribute("foo"); // GET
        session.getAttributes().put("foo", "bar") // SET
    }
);

答案 1 :(得分:0)

在我看来,可接受的解决方案是不完整的,因为它没有显示整个控制器方法,这是如何实现的方法:

@PostMapping("/login")
fun doLogin(@ModelAttribute credentials: Credentials, swe: ServerWebExchange): Mono<String> {
    return swe.session.flatMap {
        it.attributes["userId"] = credentials.userId
        "redirect:/globalPosition".toMono()
    }
}