2015-06-19 47 views
2

我一直在研究樣本Jersey程序以熟悉Java Web服務,現在我想爲其添加安全層(服務器 - GlassFish,IDE - IntelliJ )。到目前爲止,我已經實現了基於FORM的登錄系統,該系統應該引用現有的Sybase數據庫。問題在於,即使我輸入了正確的證書,它也不會進行身份驗證,並且我通常對身份驗證不夠了解,無法對其進行疑難解答。希望這裏的某個人能弄清楚我出錯的地方。下面是我所採取的步驟:使用現有數據庫在Glassfish上實現JDBC身份驗證

  1. 創建GlassFish管理控制檯社區游泳池和資源
  2. 在GlassFish管理控制檯
  3. 創建JDBC領域修改web.xml文件,包括安全約束和登錄配置
  4. 創建login.xhtml頁和loginerror.xhtml頁面

作爲一個方面說明,我試圖使用的數據庫是具有各種現有的Sybase數據庫信息(不僅僅是用戶名,還包括電子郵件,主管,電話分機等)。此數據庫沒有明確的密碼字段,但我試圖使用其中一個現有字段(即一個名爲supervisorEmail)充當密碼字段。因此,用戶可以使用他自己的電子郵件和他的主管的電子郵件進行身份驗證。

我的第一個問題是:我在哪裏指定哪些列用作數據庫中的用戶名/密碼?我以爲我會在JdbcRealm定義中這樣做,但也許我錯了。以下是我在這些領域:

JAAS語境:jdbcRealm

JNDI爲:jdbc/__ AuthDB(資源我前面創建)

用戶表:EmployeeList的(在數據庫中的表的名稱)

用戶名欄:電子郵件

密碼列:supervisorEmail

組表:組(不知道世界衛生大會噸至放在這裏)

組名稱列:命名(不知道要放什麼東西在這裏)

密碼加密算法:AES

這將導致我的第二個問題,這是「我需要一個組數據庫,如果所有用戶都獲得相同的權限「?我目前沒有。

最後,這裏是任何可用於故障排除的xml/html文件。對不起,我想盡可能具體。

的web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
    version="3.1"> 

<security-constraint> 
    <display-name>Admin Pages</display-name> 
    <web-resource-collection> 
     <web-resource-name>Secured</web-resource-name> 
     <url-pattern>/*</url-pattern> 
     <http-method>GET</http-method> 
     <http-method>POST</http-method> 
    </web-resource-collection> 

    <auth-constraint> 
     <role-name>admin</role-name> 
    </auth-constraint> 
</security-constraint> 

<!--<deny-uncovered-http-methods/>--> 

<login-config> 
    <auth-method>FORM</auth-method> 
    <realm-name>JdbcRealm</realm-name> 
    <form-login-config> 
     <form-login-page>/login.xhtml</form-login-page> 
     <form-error-page>/loginerror.xhtml</form-error-page> 
    </form-login-config> 
</login-config> 

<security-role> 
    <role-name>admin</role-name> 
</security-role> 
<servlet> 
    <servlet-name>Faces Servlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.xhtml</url-pattern> 
</servlet-mapping> 
</web-app> 

login.xhtml:

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:p="http://primefaces.org/ui"> 
<body> 
    <p:panel header="Login From"> 
     <form method="POST" action="j_security_check"> 
      Username: <input type="text" name="j_username"/> 
      Password: <input type="password" name="j_password"/> 
      <input type="submit" value="Login" /> 
      <input type="reset" value="Reset" /> 
     </form> 
    </p:panel> 
</body> 

如果你做了這麼遠,感謝您的閱讀。任何幫助是極大的讚賞。

回答

0

我想通了。在Glassfish中使用jdbc領域時,必須有兩個單獨的數據庫:一個擁有用戶/密碼列表,另一個擁有用戶列表(與以前的數據庫相同)&他們屬於哪個組。即使您希望每個人都擁有相同的權限,Glassfish也不會對您進行身份驗證。

相關問題