gpt4 book ai didi

java - 从 Controller 访问 PortletSession 属性(由拦截器设置)(Spring Portlet MVC)

转载 作者:太空宇宙 更新时间:2023-11-04 07:51:32 25 4
gpt4 key购买 nike

我是 Spring Portlet MVC 的新手,但最近几天我一直在努力学习它。我的问题的背景如下

  1. 我有一个带有单个 Controller 的 Spring Portlet MVC portlet。
  2. Portlet 配置为在用户想要访问资源时随时调用 HandlerInterceptor(方法“preHandleRender”)。
  3. 拦截器检查用户是否经过身份验证,如果没有,它会检索用户的 Liferay 凭据来管理许多其他 Web 服务的身份验证(目前不感兴趣)。
  4. 此后,拦截器将用户数据存储在 PortletSession 内

现在,我该如何从 Controller 内部检索拦截器存储在 PortletSession 中的用户数据?

sessionInterceptor.preHandleRender

@Override
public boolean preHandleRender(RenderRequest request, RenderResponse response, Object handler) throws Exception {

PortletSession session = request.getPortletSession(true);
.
.
.
session.setAttribute("userProfile", userProfileDomain,PortletSession.APPLICATION_SCOPE);
.
.
.
return true;
}

ViewController类

@Controller("viewController")
@RequestMapping(value = "view")
public class ViewController {

//@Autowired
private WebServiceTemplate webServiceTemplate = new WebServiceTemplate();

@RenderMapping
public String setModelAndView(RenderRequest request, ModelMap tgtModel) {
logger.debug("<< | >> Starting.");

PortletConfiguration conf = PortletConfiguration.getInstance();
.
.
}
}

如果需要,我准备提供有关我的代码的更多信息。

最佳答案

我能够解决问题并发现我的错误。

在拦截器中,正如我在问题中所示,我在 PortletSession.APPLICATION_SCOPE 中设置了 session 属性“userProfile”。

session.setAttribute("userProfile", userProfileDomain,PortletSession.APPLICATION_SCOPE);

至于 Controller ,我知道你有多种选择:

  • 将请求(在我的例子中为 RenderRequest)作为参数传递,从请求中获取 session (在我的例子中为 PortletSession),然后从 session 中检索属性。
  • 直接将 session 作为参数传递,然后从中检索属性。

但是,无论你走第一条路还是第二条路,如果你在 Controller 中使用以下指令

session.getAttribute("userProfile");

您不会得到任何内容,因为该属性是在 PortletSession.APPLICATION_SCOPE 中设置的。

正确的指令是:

session.getAttribute("userProfile",PortletSession.APPLICATION_SCOPE);

关于java - 从 Controller 访问 PortletSession 属性(由拦截器设置)(Spring Portlet MVC),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14382128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com