我对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 等。最终没有任何方法是可行的。
因此,我希望你们中的任何人都可以给我建议,我应该如何克服这个问题。
万分感谢,
最佳答案
对此有多种解决方案。
创建一个 servlet 过滤器来检查远程用户以及
User
的存在。 session 中的实体。如果远程用户不是null
,但是User
实体是,然后从数据库加载它并将其设置在 session 中。这里具体回答:Accessing user details after logging in with Java EE Form authentication在 session 作用域 bean 的 getter 中执行延迟加载,该 bean 应该返回
User
实体。这个答案的第一部分具体回答了这个问题:Performing user authentication in Java EE / JSF using j_security_check使用真实的 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/