2012-11-29 83 views
4

如何實施j_security_checkPrimefaces?通常,在JSP,如果你想使用JAAS進行登錄,登錄表單一般爲:j_security_check with Primefaces

<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實現它!

  • 會有什麼動作
  • 我們如何擺脫ID或名字像formId:componentId
  • 另外,p:commandButton默認情況下,在Primefaces Ajax化的,所以它是如何 提交的非Ajax形式方式

我不得不實施與Primefaces和我分享溶膠JAAS形式的認證要求這裏;它可能會派上用場。

+1

相關/欺騙:http://stackoverflow.com/questions/2206911/best-way-for-user-authentication-on-javaee-6-using-jsf-2-0/2207147#2207147 – BalusC

回答

18

該解決方案非常簡單。

  • 您需要與prependId="false"定義h:form,所以它不會生成組件的ID或名字作爲formId:componentId
  • 您需要定義在h:formonsubmit="document.getElementById('login').action='j_security_check';"
  • action="j_security_check"p:commandButtonajax屬性設置爲false,使形式沒有得到在AJAX方式提交。

就是這樣。下面是其可通過上述的形式被替換的登錄表單的完整代碼:

<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> 

感謝。

+6

您可以使用'

'而不是''。不需要討厭的JS代碼(通過刪除'document.getElementById('login')''部分),它本身也可以更簡化。 – BalusC

+0

@BalusC對於已故的評論感到抱歉,但它看起來都不是正確的解決方案。我同意JavaScript是醜陋的 - 但是如果你只使用'',你不能在'p:commandButton'中使用'id =「submit」',因此登錄將不起作用....任何想法if有一個更清潔的解決方案? –

+1

@OschtärEi:只需使用帶有PF風格類的'''。 – BalusC

2

有在工作(與Primefaces 5)代碼(已刪除名字從對屬性:的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>