我想知道如何创建可以在所有用户请求中使用的用户会话对象。用户可以在登录后选择配置文件,因此我需要使用此配置文件数据更新该会话对象。
怎么做?如何初始化会话范围的bean?如何在以后更改该SessionScoped bean中的对象(有必要记住其会话中的一些用户操作)。
如果你能在这方面帮助我,我会很高兴:)
@SessionScoped @Named
public class UserSession implements Serializable {
private ExtendedUserPrincipal extendedUserPrincipal;
@PostConstruct
private void instantiateSession() {
extendedUserPrincipal = new ExtendedUserPrincipal();
}
public void setUserPrincipal(UserPrincipal userPrincipal) {
extendedUserPrincipal.setUserPrincipal(userPrincipal);
}
public void setUser(User user) {
extendedUserPrincipal.setUser(user);
}
public void setUserSecurityData(UserSecurityData userSecurityData) {
extendedUserPrincipal.setUserSecurityData(userSecurityData);
}
@Produces @AuthenticatedUser
private ExtendedUserPrincipal getPrincipal() {
return extendedUserPrincipal;
}
}
我通过在HttpServletRequest上获得的会话上调用logout()和invalidate()来使会话无效。
我正在注入像这样的用户主体。每个用户会话的对象应该相同
@Inject
@AuthenticatedUser
private ExtendedUserPrincipal extendedUserPrincipal;
答案 0 :(得分:-1)
我不确定所有注释的含义,但您应该能够使用HttpServletRequest对象手动将对象放入会话中。
request.getSession().setAttribute("userbean", yourBean);
然后,如果您需要更新它,只需获取并设置它像任何其他地图
request.getSession().getAttribute("userbean");
userbean将保留在会话中,直到无效。
有许多不同的@JD注释不同的java库,但注释通常只是更基本的手动操作的快捷方式。
我不熟悉你正在使用的特定库/注释,但从它的外观来看,@ SessionScoped只会将bean注入到用户的会话属性中,并自动地将#39注入;对你而言。
用户的会话只是在特定用户登录时处于活动状态的地图。您可以在会话属性映射中放置任何类型的java对象,它不需要是特殊类型的对象或任何东西。 A'会话范围的bean'对于已经添加到用户会话属性映射中的java对象来说,这基本上是一些奇特的词。'
当用户的会话结束时,request.getSession()对象与属性映射中的对象一起被销毁(只要它们不被其他任何地方引用),这就是它们为什么会被'会话范围'。
另外,你可能想尝试将@SessionScoped @Named放在单独的行上,我不确定它会在一行上解析它们。