标签: session-scope

如何在Guice中使用@SessionScoped

嗨,
我目前正在玩Guice和@SessionScoped.为了更有意义,我决定构建一个(非常简单的)身份验证过程.

下面,我将解释我所做的每一步.然后我会问你一些问题.

[1] 我创建了一个代表一个人(访客或用户)的Identity类:

@SessionScoped
public class Identity implements Serializable
{
    private String uid;
    private String name;

    public boolean isAuthenticate()
    {
        return uid != null;
    }

    public void logout()
    {
        this.uid = null;
    }

    /*Setters-Getters*/
}
Run Code Online (Sandbox Code Playgroud)

[2] 接下来,我创建了一个登录用户的Authentication类:

public class Authentication
{
    @Override
    public Identity authenticate(String login, String password)
    {
        /*some code*/

        Identity identity = new Identity();
        identity.setUid(user.getId());
        return identity;
    }
}
Run Code Online (Sandbox Code Playgroud)

[3] 然后,在我的Servlet中,我登录用户:

@RequestScoped
public class LoginAction
{
    @Inject
    Injector injector;

    protected void login(HttpServletRequest req, HttpServletResponse resp)
    { …
Run Code Online (Sandbox Code Playgroud)

java authentication guice session-scope

5
推荐指数
1
解决办法
7071
查看次数

如何在AuthenticationSuccessHandler中检索会话范围的bean?

我有一个自定义AuthenticationSuccessHandler.

我想要做的是在onAuthenticationSuccess方法中设置一些会话数据.

要存储会话数据,我想使用会话范围的bean,它可以在任何控制器中正常工作.

但是如果我尝试在onAuthenticationSuccess方法中检索它,我会得到一个异常:

创建名为'scopedTarget.sessionData'的bean时出错:范围'session'对当前线程无效;

我的代码是:

WebApplicationContext context = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getServletContext());
SessionData sessionData = context.getBean(SessionData.class);
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

java spring dependency-injection spring-mvc session-scope

4
推荐指数
1
解决办法
2536
查看次数

从请求范围的bean访问会话范围的bean

我正在尝试使用在IceFaces页面上找到的模式.(我没有使用IceFaces,使用PrimeFaces)

在这种情况下,我有两个豆:

UserControllerUsermodel

在我的UserModel上,我有一个UserVO实例(由另一个程序员创建).在我的UserController上我有这个:

@ManagedBean
@RequestScoped
public class UserController implements Serializable
{

    private static final long serialVersionUID = 1L;
    private UserBO bo;
    private UserModel model;

    public UserController()
    {
        bo = new UserBO();
        model = new UserModel();
    }

    public void Login() throws IOException
    {
        model.setUserVo(bo.executeLogin(model.getUserVo()));
        ExternalContext externalContent = FacesContext.getCurrentInstance().getExternalContext();
        if (!model.getUserVo().isError())
        {
            model.setLoggedIn(true);
            externalContent.getSessionMap().put("userSession", model);
            externalContent.redirect(externalContent.getRequestContextPath() + "/views/request/search.html");
        } else
        {
            model.setLoggedIn(false);
            FacesMessage facesMessage = new FacesMessage(FacesMessage.SEVERITY_ERROR, model.getUserVo().getMessage(), model.getUserVo().getLogin());
            FacesContext.getCurrentInstance().addMessage(null, facesMessage);
        }
    } …
Run Code Online (Sandbox Code Playgroud)

jsf session-scope jsf-2

4
推荐指数
2
解决办法
1万
查看次数

删除/销毁会话范围的CDI托管bean

我有一个会话作用域CDI托管bean:

@Named
@SessionScoped 
public class SampleBean implements Serializable {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

我需要在某个流程之后从会话中删除这个bean,我使用了以下代码,如下面的答案所示:

ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
ec.getSessionMap().remove("sampleBean");
Run Code Online (Sandbox Code Playgroud)

但是,它不起作用,并且SampleBean在会话中仍然存在.
我错过了什么吗?

session-scope destroy cdi jsf-2 managed-bean

4
推荐指数
1
解决办法
4050
查看次数

如何在SesionScoped bean中使用ViewScoped bean?

我有三个托管bean:一个作用域范围(S)和两个视图作用域(A,B).我想在S和B中使用A的功能,但问题是在会话范围内注入视图范围的bean是不可能的.

The scope of the object referenced by expression #{a}, view, is shorter than the referring managed beans (s) scope of session
Run Code Online (Sandbox Code Playgroud)

我不想复制A的功能.任何的想法?

jsf dependency-injection session-scope jsf-2 view-scope

2
推荐指数
1
解决办法
1623
查看次数

@SessionScoped (CDI) 和 @Stateful (Java EE) 之间的区别

我了解到 CDI Bean 可以用于不同的基于 Web 应用程序的范围(仅限于此,对吧?)。例如:@RequestScoped、@SessionScoped等。@SessionScoped 将数据保存在整个浏览器会话上的托管 bean 中。这在逻辑上听起来很安静,因为注释名称描述了它的作用。然而,现在我更仔细地了解了 EJB 会话 Bean。到目前为止我知道,这样的状态可能具有以下三种状态之一:@Stateless、@Stateful 和@Singleton。对我来说,看起来它们和 CDI bean 的注释之间有直接的可比性:@RequestScoped --> @Stateless、@SessionScoped --> @Stateful、@ApplicationScoped --> @Singleton。但由于我正在研究一些示例,我发现了一个同时包含 @Stateful 和 @SessionScoped 注释的 bean。我寻找解释 - 但我没有找到任何可以理解的答案。那么,到底有什么区别呢?为什么我必须使用这两个注释?谢谢。

annotations stateful session-scope cdi jakarta-ee

2
推荐指数
1
解决办法
3107
查看次数

JSF/Xpages 如何清除会话范围?

我想清除 xpages 应用程序中的当前会话范围并再次重新加载它们。我努力了:

public Map<String, Object> sesScope;
this.sesScope = JSFUtil.getSessionScope();

clearMap(sesScope);

private void clearMap(Map<String, Object> map ){ // Get iterator for the keys
    String methodName = new Object(){}.getClass().getEnclosingMethod().getName();
    utils.printToConsole(this.getClass().getSimpleName().toString() + " " + methodName);
    utils.printToConsole("-------before removing------");
    utils.printToConsole(map.toString());

    Set keyset = map.keySet();
    Iterator itr = keyset.iterator();
    while (itr.hasNext()) {
        itr.next();
        itr.remove();
    }

    utils.printToConsole("--------After removing-------");
    utils.printToConsole(map.toString());
}
Run Code Online (Sandbox Code Playgroud)

不知怎的,我不能简单地说 sesScope.clear() 因为这会导致错误:

com.sun.faces.context.BaseContextMap.clear(ExternalContextImpl.java:392) 处的 java.lang.UnsupportedOperationException

如何正确清除会话范围?

java jsf session-scope xpages

2
推荐指数
1
解决办法
74
查看次数

MySQL:@variable与变量.有什么不同?(第2部分)

好的,基于我问的最后一个问题,Mysql如何处理以下代码中的where语句:

DELIMITER ;//
DROP PROCEDURE IF EXISTS `test`;//
CREATE PROCEDURE `test`
(
  id INT
)
BEGIN
  SELECT *
    FROM some_table
   WHERE id = id;
END;//
Run Code Online (Sandbox Code Playgroud)

在这种情况下MySQL会做什么?它是否将where子句视为

some_table.id = id
Run Code Online (Sandbox Code Playgroud)

或者它是否像对待它一样

some_table.id = some_table.id 
Run Code Online (Sandbox Code Playgroud)

现在我正在做类似的事情

WHERE id = @id
Run Code Online (Sandbox Code Playgroud)

因为我不知道MySQL中有会话变量而且它没有抱怨,我认为这是一种明确的方式来说"这个列等于这个变量".

有些人可能会说"呃..当然它把它当作列=变量",但我可以很容易地说"变量=列".那怎么处理呢?

mysql variables session-scope

1
推荐指数
1
解决办法
3292
查看次数

会话范围bean - 如何处理多用户数据

我使用JSF 2.0创建了一个Web应用程序.我到处都使用会话范围bean,因此我遇到了问题.:(我将用下面的例子解释.

我有dataTable中的用户列表.当我点击用户时,我会看到该用户的详细信息.现在,当我右键单击用户A并单击时Open in new tab,我会在新选项卡中看到用户A的详细信息.

现在,当我右键单击用户B并单击在新选项卡中打开时,我会看到用户B的详细信息.

但是,当我进入选项卡(用户A详细信息在那里)并刷新该页面时,我会看到用户B的详细信息.

如何克服这一点,以便如果我刷新页面,我仍然会看到用户A而不是用户B的详细信息.

java jsf javabeans session-scope jsf-2

0
推荐指数
1
解决办法
938
查看次数

@SessionScoped是一个好习惯吗?

我已经阅读了范围(@SessionScoped, @ViewScoped, @ApplicationScope and @RequestScope)类型之间的所有差异,但是,我仍然在某种程度上遇到应用程序问题。我有一个page-1 与网格和我所选择的项目发送到page-2(两者page-1page-2用相同的支持bean),以进行编辑,然后持续存在。据我所知,我的托管bean正在使用@RequestScopedjavax.faces.bean.RequestScoped这是理想的使用范围,但是它不起作用,bean被破坏了,数据丢失了。

恢复该故事,我将注释更改为@SessionScoped并且可以正常工作,但是我想知道这是否是一个好习惯?因为我已经读到,使用这种方法不是一个好习惯,@SessionScoped因为在客户端注销之前数据将一直保持活动状态。

jsf session-scope scopes

0
推荐指数
1
解决办法
6614
查看次数

在ExternalContext中访问@SessionScoped @ManagedBean类#getSessionMap()返回null

我试图从ManagedBeanUtil类获取我的SessionScoped managedBean的对象,但所有iam获取为null.

这是我的代码: -

package com.beas.ui.manager;
@ManagedBean(name = "sessionManager")
@SessionScoped
public class SessionManager implements Serializable {
private static final long serialVersionUID = -3064514740080155761L;

//..
}

public class ManagedBeanUtil {

public static SessionManager getSessionManager() {

    return (SessionManager) FacesContext.getCurrentInstance()
            .getExternalContext().getSessionMap().get("sessionManager"); // returns null
}
}
Run Code Online (Sandbox Code Playgroud)

我不知道我做错了什么.谁能为此提供合适的解决方案?

jsf session-scope managed-bean

0
推荐指数
1
解决办法
658
查看次数