使用Primefaces进行j_security_check

时间:2012-11-29 06:47:25

标签: java authentication jsf-2 primefaces jaas

如何使用 Primefaces 实施 j_security_check ?通常在 JSP 中,如果您想使用 JAAS 进行登录,则登录表单通常为:

<form action="j_security_check" method="POST">
   Username:<input type="text" name="j_username"><br>
   Password:<input type="password" name="j_password">
   <input type="submit" value="Login">
</form>

但是我们如何在JSF或Primefaces中实现它!

  • 行动将是什么
  • 我们如何摆脱formId:componentId
  • 之类的ID或名称
  • 默认情况下,p:commandButton在Primefaces中被ajaxified,所以它是怎么回事 以非ajax方式提交表格

我需要使用 Primefaces 实施 JAAS 表单身份验证,我在这里分享解决方案;它可能对某人有用。

2 个答案:

答案 0 :(得分:18)

解决方案非常简单。

  • 您需要使用h:form定义prependId="false",以便它不会将组件的ID或名称生成为formId:componentId
  • 您需要将action="j_security_check"中的h:form定义为onsubmit="document.getElementById('login').action='j_security_check';"
  • ajax的{​​{1}}属性设置为p:commandButton,以便不以ajax方式提交表单。

就是这样。以下是登录表格的完整代码,可以用上述表格代替:

false

感谢。

答案 1 :(得分:2)

有工作(使用Primefaces 5)代码(从p:inputText删除名称属性,p:密码,删除由BalusC部分建议):

<h:form id="login" onsubmit="action='j_security_check';" prependId="false">
    <h:panelGrid columns="2">
        <p:outputLabel for="j_username" value="Username" />
        <p:inputText id="j_username" />            
        <p:outputLabel for="j_password" value="Password" />
        <p:password id="j_password" />
        <p:commandButton id="submit" value="Login" ajax="false"/>
    </h:panelGrid>
</h:form>