Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CDI SessionScoped Bean生成大量会话_Session_Jsf_Cdi_Session Scope - Fatal编程技术网

CDI SessionScoped Bean生成大量会话

CDI SessionScoped Bean生成大量会话,session,jsf,cdi,session-scope,Session,Jsf,Cdi,Session Scope,我正在登录。问题是:其他会话多次调用了我的isUserLoggedIn()方法(我使用 (HttpSession)FacesContext.getCurrentInstance().getExternalContext().getSession(false)) (JSF页面的)登录bean如下: 因此,发生的情况是:当调用login()时,我可以通过getSession()看到它是X,但随后在尝试访问另一个页面时,当调用isUserLoggedIn()时,getSession()方法返回Y而不是

我正在登录。问题是:其他会话多次调用了我的isUserLoggedIn()方法(我使用
(HttpSession)FacesContext.getCurrentInstance().getExternalContext().getSession(false)

(JSF页面的)登录bean如下:

因此,发生的情况是:当调用login()时,我可以通过getSession()看到它是X,但随后在尝试访问另一个页面时,当调用isUserLoggedIn()时,getSession()方法返回Y而不是X,并且user属性为null。通常,isUserLoggedIn()方法只需要一个请求就被调用多次,每次调用时它的会话都会发生变化

顺便说一下,我使用的是JBoss AS7 Final,我的faces-config.xml如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="2.0" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="         http://java.sun.com/xml/ns/javaee         http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">

    <navigation-rule>
        <from-view-id>/login.xhtml</from-view-id>
        <navigation-case>
            <from-action>#{login.login}</from-action>
            <from-outcome>success</from-outcome>
            <to-view-id>/secured/home.xhtml</to-view-id>
            <redirect />
        </navigation-case>
        <navigation-case>
            <from-action>#{login.login}</from-action>
            <from-outcome>failure</from-outcome>
            <to-view-id>/login.xhtml</to-view-id>
            <redirect />
        </navigation-case>
    </navigation-rule>
    <navigation-rule>
        <from-view-id>/*.xhtml</from-view-id>
        <navigation-case>
            <from-action>#{login.logout}</from-action>
            <from-outcome>success</from-outcome>
            <to-view-id>/login.xhtml</to-view-id>
            <redirect />
        </navigation-case>
    </navigation-rule>
</faces-config>

/login.xhtml
#{login.login}
成功
/secured/home.xhtml
#{login.login}
失败
/login.xhtml
/*.xhtml
#{login.logout}
成功
/login.xhtml

有什么想法吗?谢谢。

回到那里一段时间后,我发现问题与url路径有关。cookie是为路径生成的,当更改路径并尝试访问会话时,它是为另一个路径生成的

无论如何,我发现这绝对不是保护JavaEE应用程序的方法(请参阅JavaEE6手册),所以我选择了另一种方法


谢谢。

如果您自己不做一点调试工作,这个问题是无法回答的。关键的一点是,要么您的客户端不支持cookies,要么您正在根据每个请求重新创建会话。第一步是使用诸如Firebug之类的HTTP流量检查器检查会话cookie的情况。服务器是否在每个响应上返回新的
Set Cookie
?或者客户端是否拒绝在每次请求时返回
Cookie
?这应该有助于锁定罪犯。谢谢你的回答,巴卢斯克。回到那里一段时间后,我发现问题与url路径有关。cookie是为路径生成的,当更改路径并尝试访问会话时,它是为另一个路径生成的。
<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="2.0" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="         http://java.sun.com/xml/ns/javaee         http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">

    <navigation-rule>
        <from-view-id>/login.xhtml</from-view-id>
        <navigation-case>
            <from-action>#{login.login}</from-action>
            <from-outcome>success</from-outcome>
            <to-view-id>/secured/home.xhtml</to-view-id>
            <redirect />
        </navigation-case>
        <navigation-case>
            <from-action>#{login.login}</from-action>
            <from-outcome>failure</from-outcome>
            <to-view-id>/login.xhtml</to-view-id>
            <redirect />
        </navigation-case>
    </navigation-rule>
    <navigation-rule>
        <from-view-id>/*.xhtml</from-view-id>
        <navigation-case>
            <from-action>#{login.logout}</from-action>
            <from-outcome>success</from-outcome>
            <to-view-id>/login.xhtml</to-view-id>
            <redirect />
        </navigation-case>
    </navigation-rule>
</faces-config>