如何从HttpSession而不是会话中注入一个值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从HttpSession而不是会话中注入一个值相关的知识,希望对你有一定的参考价值。

当使用spring MVC时,通过将HttpSession session添加到方法的签名中,将HttpSession传递给方法真的很容易,之后你可以做类似的事情。

Integer valueFromSession = (Integer) session.getAttribute("key1")
Integer anotherValueFromSession = (Integer) session.getAttribute("key2")

我现在遇到的问题是我们在许多不同的控制器中需要很多不同方法的会话值,所以我的问题是,是否可以从会话中获取值并自动将其注入到方法因此而不是:

@GetMapping("/something")
public String foo(HttpSession session) {
    Integer valueFromSession = (Integer) session.getAttribute("key1")
    Integer anotherValueFromSession = (Integer) session.getAttribute("key2")

    return someMethod(valueFromSession, anotherValueFromSession);
}

我可以有:

@GetMapping("/something")
public String foo(HttpSessionData dataFromSession) {

    return someMethod(dataFromSession.getValue(), dataFromSession.getAnotherValue();
}

DataFromSession是从HttpSession填充的类。有没有办法做到这一点?

答案

您可以将@SessionAttribute与spring MVC一起使用,它将从session中检索现有属性,更多请参阅here

@GetMapping("/something")
public String foo(@SessionAttribute("key1") Integer key1, @SessionAttribute("key2") Integer key2) {
    return someMethod(key1, key2);
}

以上是关于如何从HttpSession而不是会话中注入一个值的主要内容,如果未能解决你的问题,请参考以下文章

从 JSF 请求中检索会话 ID 值

HttpSession服务器端会话技术

我怎样才能获得所有开放的会话?

通过作为隐藏输入字段提交的会话 ID 获取 HttpSession

JavaWeb——HttpSession常用方法示例

3.HttpSession