Spring 使用框架组合时获取会话的正确方法
我有一个web应用程序 SpringFramework 4.0发行版GA Spring Security 3.2.0版本GA JPA2.0由Hibernate 4.2.7最终版提供 莫哈拉2.2.5 PrimeFaces 4.0决赛 PrimeFaces扩展1.1.0 OmniFaces 1.6.3 我有一个关于使用Spring Security时获得会话的问题。假设bean由Spring管理 用户会话可以使用Spring Security获得,如下所示Spring 使用框架组合时获取会话的正确方法,spring,jsf,session,spring-security,jsf-2.2,Spring,Jsf,Session,Spring Security,Jsf 2.2,我有一个web应用程序 SpringFramework 4.0发行版GA Spring Security 3.2.0版本GA JPA2.0由Hibernate 4.2.7最终版提供 莫哈拉2.2.5 PrimeFaces 4.0决赛 PrimeFaces扩展1.1.0 OmniFaces 1.6.3 我有一个关于使用Spring Security时获得会话的问题。假设bean由Spring管理 用户会话可以使用Spring Security获得,如下所示 RequestAttributes cu
RequestAttributes currentRequestAttributes = RequestContextHolder.currentRequestAttributes();
currentRequestAttributes.getAttribute("attributeName", RequestAttributes.SCOPE_SESSION);
或
甚至
ServletRequestAttributes servletRequestAttributes=(ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
HttpSession session = servletRequestAttributes.getRequest().getSession();
session.getAttribute("attributeName");
或者,如果只是SpringMVC,那么它可以像
request.getSession().getAttibute("attributeName")
在弹簧控制器中
如果用户会话以如下所示的JSF方式公开,会发生什么
ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
HttpSession session = (HttpSession) context.getSession(true);
Object attribute = session.getAttribute("attributeName");
Spring Security是否可以控制会话
使用这样的框架组合时,获得用户会话的正确方法是什么?这或多或少是实验性的
一切免责声明:您的问题令人困惑。您的问题基本上是询问如何获取会话范围的托管bean,但是您的标题提出了完全不同的问题:获取HTTP会话。让我们假设您确实想知道如何获得会话范围的托管bean:为什么不把它变成一个真正的会话范围的托管bean并注入它呢?然后,所需的有状态会话范围的数据可以存储为该bean的属性。在给定环境中使用会话之后,在我看来,将会话存储到真正的会话范围的托管bean中是正确的方法!您想回答这个问题吗?@您的意思是,存储会话范围的数据。您不能控制/管理HTTP会话本身。服务器已经完成了这项工作。再想一想,你自己还没有开始新的HttpSession。您只是间接地获取它,以便将会话范围的数据作为属性获取/设置,就像JSF和Spring对会话范围的托管bean实例所做的那样。
ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
HttpSession session = (HttpSession) context.getSession(true);
Object attribute = session.getAttribute("attributeName");