2017-01-02 66 views
0

當前的應用程序設置是帶有JBoss服務器的JSF。我想將其他邏輯與現有的導航到登錄失敗頁面的域身份驗證一起使用。尋找從Realm(java)成功pricinpal無效的東西。jboss領域的其他邏輯

場景:用戶鍵入正確的密碼和登錄名,但有一定條件不允許他登錄。

配置:

standalone.xml

<security-domain name="login"> 
    <authentication> 
     <login-module code="Database" flag="sufficient"> 
      <module-option name="dsJndiName" value="java:/datasource"/> 
      <module-option name="principalsQuery" value="query"/> 
      <module-option name="rolesQuery" value="query"/> 
      <module-option name="hashAlgorithm" value="???"/> 
      <module-option name="hashEncoding" value="???"/> 
      <module-option name="principalClass" value="org.jboss.security.SimplePrincipal"/> 
     </login-module> 
    </authentication> 
</security-domain> 

的jboss-web.xml中

<jboss-web> 
    <security-domain>login</security-domain> 
</jboss-web> 

faces-config.xml中

<login-config> 
    <auth-method>FORM</auth-method> 
    <realm-name>ApplicationRealm</realm-name> 
    <form-login-config> 
     <form-login-page>login.html</form-login-page> 
     <form-error-page>login-error.html</form-error-page> 
    </form-login-config> 
</login-config> 

我有一些想法,我看不到很容易儘管容易改變。從會議並設置參數

  • 刪除pricipal是登錄頁面(單點登錄僅頁)
  • 編寫自定義域登錄模塊上選中

謝謝

回答

2

如果你的額外檢查涉及在與通過java:/datasource訪問的數據庫相同的數據庫中的數據庫查詢,那麼可能您需要的僅僅是principalsQuery的更復雜的查詢。

或者,您可以實現執行附加邏輯的servlet過濾器。如果測試失敗並且不應提供用戶訪問權限,則您請撥打HttpServletRequest.logout(),然後重定向到login-error.html頁面。

然而,也可能是更優雅通過修改security-domain配置和添加包含您的附加邏輯的第二登錄模塊做到這一點:

<security-domain name="login"> 
    <authentication> 
     <login-module code="Database" 
         flag="required"> 
      <module-option name="dsJndiName" value="java:/datasource"/> 
      <module-option name="principalsQuery" value="query"/> 
      <module-option name="rolesQuery" value="query"/> 
      <module-option name="hashAlgorithm" value="???"/> 
      <module-option name="hashEncoding" value="???"/> 
      <module-option name="principalClass" value="org.jboss.security.SimplePrincipal"/> 
     </login-module> 
     <login-module code="com.yourorg.yourapp.ExtendedLoginCheck" 
         flag="required" 
         module="name-of-wildfly-module-containing-ExtendedLoginCheck"> 
      <module-option name="your module option" value="your module option value" /> 
      ... 
     </login-module> 
    </authentication> 
</security-domain> 

其中com.yourorg.yourapp.ExtendedLoginCheck實現javax.security.auth.spi.LoginModule。請注意,login-moduleflag屬性值已更改爲required。這些模塊一個接一個地執行,並且都必須成功通過認證嘗試才能成功。

+0

正是我在找的東西。謝謝 – Smolda