问题
How to implement j_security_check with Primefaces? Normally in JSP if you want to use JAAS for login, the login form generally is:
<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>
But how do we implement it in JSF or in Primefaces!
- What will be the action
- How do we get rid of id or name like
formId:componentId
- Also the
p:commandButton
is ajaxified in Primefaces by default, so how does it submit the form in non-ajax way
I had a requirement to implement the JAAS form authentication with Primefaces and I am sharing the solution here; it might come handy to someone.
回答1:
The solution is pretty straightforward.
- You need to define the
h:form
withprependId="false"
, so that it will not generate id or name of the component asformId:componentId
. - You need to defined the
action="j_security_check"
in theh:form
asonsubmit="document.getElementById('login').action='j_security_check';"
- Set the
ajax
attribute of thep:commandButton
tofalse
, so that the form doesn't get submitted in ajax way.
That's it. Here is the complete code of the login form which can be replaced by the aforesaid form:
<h:form id="login" onsubmit="document.getElementById('login').action='j_security_check';" prependId="false">
<h:panelGrid columns="2">
<p:outputLabel for="j_username" value="Username" />
<p:inputText id="j_username" name="j_username" />
<p:outputLabel for="j_password" value="Password" />
<p:password id="j_password" name="j_password"/>
<p:commandButton id="submit" value="Login" ajax="false"/>
</h:panelGrid>
</h:form>
Thanks.
回答2:
There is working (with Primefaces 5) code (removed name attributes from p:inputText and p:password, removed suggested by BalusC part):
<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>
来源:https://stackoverflow.com/questions/13620287/j-security-check-with-primefaces