Jakarta ee Java中j_安全检查完成身份验证后如何触发Bean

Jakarta ee Java中j_安全检查完成身份验证后如何触发Bean,jakarta-ee,jsf-2,primefaces,j-security-check,Jakarta Ee,Jsf 2,Primefaces,J Security Check,我对java网页环境非常陌生。最近我尝试使用Java开发一个电子商务平台 因此,我使用j_安全检查表单作为身份验证工具。身份验证完成后,已成功重新定向到所需页面 但是,由于我必须从数据库(MS SQL 2005)加载最终用户设置和信息,所以我必须在验证完成后和页面重新定向之前加载所有信息 我尝试了一些使用primefaces的方法,但无法触发加载用户信息的bean方法 我尝试的方法之一是使用oncomplete触发bean方法 <h:form id="login" prependId="f

我对java网页环境非常陌生。最近我尝试使用Java开发一个电子商务平台

因此,我使用j_安全检查表单作为身份验证工具。身份验证完成后,已成功重新定向到所需页面

但是,由于我必须从数据库(MS SQL 2005)加载最终用户设置和信息,所以我必须在验证完成后和页面重新定向之前加载所有信息

我尝试了一些使用primefaces的方法,但无法触发加载用户信息的bean方法

我尝试的方法之一是使用oncomplete触发bean方法

<h:form id="login" prependId="false"
                    onsubmit="document.getElementById('login').action='j_security_check';">
                    <h:panelGrid columns="2" cellpadding="5">  
                        <h:outputLabel for="j_username" value="Username:" />
                        <p:inputText value="#{loginBean.username}"   
                                     id="j_username" required="true" label="j_username" />
                        <h:outputLabel for="j_password" value="Password:" />  
                        <h:inputSecret value="#{loginBean.password}"   
                                       id="j_password" required="true" label="j_password" />
                        <f:facet name="footer">  
                            <p:commandButton id="loginButton" value="Login" type="submit" ajax="false"                                                 
                                              oncomplete="#{loginBean.login()}"/>
                        </f:facet>  
                    </h:panelGrid>
                </h:form>

我也尝试过类似的方法,将oncomplete改为onclick和其他。最终没有任何方法是可行的

因此,我希望你们中的任何人都能给我建议,我应该如何克服这个问题


万分感谢,

有几种解决方案

  • 创建一个servlet过滤器,用于检查远程用户以及会话中是否存在
    user
    实体。如果远程用户不是
    null
    ,但
    user
    实体是,则从DB加载它并在会话中设置它。具体回答如下:

  • 在会话范围bean的getter中执行延迟加载,该bean应返回
    用户
    实体。这在回答的第一部分中得到了具体回答:

  • 使用真正的JSFBean操作方法执行编程登录,并直接获取
    用户
    实体。这在回答的第二部分中得到了具体回答:



  • 与具体问题无关,您应该使用
    而不是
    。那么你也不需要那种讨厌的JS黑客来改变表单的操作。

    谢谢你的回答,很抱歉这么长时间只回复你的答案。我尝试了你建议的第一个解决方案,但它对我无效。我添加了一个新类作为UserFilter,并且通过使用调试模式(我使用的是NetBean IDE 7.2),程序不能进入UserFilter。我是否遗漏了一些要添加的内容,以便在用户登录后程序将转到UserFilter?此外,UserService是一种用于检索我希望获得的用户设置的方法。不是吗?非常感谢您的帮助..谢谢...
    @WebFilter
    注释仅适用于部署到Servlet 3.0兼容容器(带有Servlet 3.0兼容的
    web.xml
    文件)上的web应用程序。否则,您必须在
    web.xml
    中手动注册它。最后,我也无法进入WebFilter。因此,我选择@BalusC提出的方法3。这是一个很好的答案,很容易就解决了我的问题。非常感谢巴卢斯克…很抱歉我不能投票给这个答案,因为有用的答案是因为我的声誉不足以投票…无论如何,这个答案非常有用。谢谢。。