jakarta-ee - Java中j_security_check完成认证后如何触发Bean

标签 jakarta-ee jsf-2 primefaces j-security-check

我对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 等。最终没有任何方法是可行的。

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

万分感谢,

最佳答案

对此有多种解决方案。

  1. 创建一个 servlet 过滤器来检查远程用户以及 User 的存在。 session 中的实体。如果远程用户不是null ,但是User实体是,然后从数据库加载它并将其设置在 session 中。这里具体回答:Accessing user details after logging in with Java EE Form authentication

  2. 在 session 作用域 bean 的 getter 中执行延迟加载,该 bean 应该返回 User实体。这个答案的第一部分具体回答了这个问题: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 来更改表单的操作。

关于jakarta-ee - Java中j_security_check完成认证后如何触发Bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15022473/

相关文章:

java - 在tomcat中部署JSF2应用程序时看不到欢迎页面

java - commandButton actionListener 调用 selectOneMenu 监听器

java - 在 JSF 2 中,绑定(bind)过程发生在执行操作之前

java - 何时使用 Spring @Transactional (propagation = Propagation.SUPPORTS)?

java - JBPM : couldn't deploy process archives : null

java - 使用 Tomcat 在 Eclipse 中找不到源

java - Primefaces 异常 INFO : java. lang.ArithmeticException :/by zero java. lang.ArithmeticException:/by zero

jsf - Primefaces 数据表行编辑器

jsf - 是方向 ="horizontal"在 p :tree is available in primefaces-3. 3.1

java - 如何检测企业 Java 项目(Java + JSP + Javascript)中的无效代码?