2

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

因此,我使用 j_security_check Form-Based 作为我的身份验证工具。认证完成后成功重定向到期望页面。

但是,由于我必须从数据库(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 和其他。最终没有任何方法是可行的。

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

百万谢谢,

4

1 回答 1

3

有几种解决方案。

  1. 创建一个 servlet 过滤器,用于检查远程用户和会话中是否存在User实体。如果远程用户不是null,但User实体是,则从数据库加载它并在会话中设置它。在这里具体回答:Accessing user details after login with Java EE Form authentication

  2. User在应该返回实体的会话范围 bean 的 getter 中执行延迟加载。这个答案的第一部分具体回答了这个问题:Performing user authentication in Java EE / JSF using j_security_check

  3. 使用真正的 JSF bean 操作方法执行编程登录并User直接获取实体。这个答案的第二部分具体回答了这个问题:Performing user authentication in Java EE / JSF using j_security_check


与具体问题无关,您应该使用<form action="j_security_check" method="post">而不是<h:form prependId="false">. 然后你也不需要那个讨厌的 JS hack 来改变表单的动作。

于 2013-02-22T12:49:58.110 回答