如何创建会话范围的bean?

时间:2018-01-16 21:38:26

标签: java session servlets session-scope jaspic

我想知道如何创建可以在所有用户请求中使用的用户会话对象。用户可以在登录后选择配置文件,因此我需要使用此配置文件数据更新该会话对象。

怎么做?如何初始化会话范围的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;

1 个答案:

答案 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放在单独的行上,我不确定它会在一行上解析它们。