2011-03-08 77 views
1

我將GlassFish設置爲使用「JDBCRealm」。配置是這樣的,它工作正常:關於GlassFish/Tomcat安全領域的問題

<JDBCRealm userTable="users" userNameCol="user_name" 
userCredCol="user_pass" userRoleTable="user_roles" 
roleNameCol="role_name" ... /> 

我的數據庫目前看起來是這樣的:

- USERS - 
USER_NAME | USER_PASS 
steve | password1 

- USER_ROLES - 
USER_NAME | ROLE_NAME 
steve | ADMIN 

我的問題是,如果我想在數據庫中的數據標準化的了,我怎麼配置一個可以理解新數據庫設計的領域?我必須寫一個自定義的「領域」對象或類似的東西嗎?

相反,我想我的數據庫來查找東西這樣的:

- USERS - 
USER_ID | USER_NAME | USER_PASS 
1 | steve | password1 

- ROLES - 
ROLE_ID | ROLE_NAME 
2 | ADMIN 

- USER_ROLES - 
USER_ID | ROLE_ID 
1 | 2 

任何幫助,不勝感激!

回答

1

它應該直接工作。我剛剛爲Glassfish服務器做了幾天。但我認爲它應該與Tomcat類似。我有3個表:

  • 用戶名(登錄(PK),密碼,...)
  • 組(GROUP_ID(PK),組名)
  • group_has_user(登錄(FK從用戶表),GROUP_ID (從組表FK))

我的JDBC領域如下所示:

<auth-realm name="Register-User" classname="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm"> 
      <property name="jaas-context" value="jdbcRealm" /> 
      <property name="datasource-jndi" value="jdbc/ladb" /> 
      <property name="user-table" value="user" /> 
      <property name="user-name-column" value="login" /> 
      <property name="password-column" value="password" /> 
      <property name="group-table" value="group_has_user" /> 
      <property name="group-name-column" value="group_id" /> 
      <property name="digest-algorithm" value="SHA-256" /> 

如果遇到問題,請確保列group_id在組表中和連接表中具有相同的名稱。

1

我們解決這個問題的方法是規範化數據庫併爲glassfish創建視圖。

     Table "public.admin" 
    Column  |   Type    | Modifiers 
---------------+-----------------------------+----------- 
id   | bigint      | not null 
login   | character varying(255)  | not null 
password  | character varying(255)  | not null 


      Table "public.role" 
Column |   Type   | Modifiers 
--------+------------------------+----------- 
id  | bigint     | not null 
name | character varying(255) | 



    Table "public.role_admins" 
    Column | Type | Modifiers 
----------+--------+----------- 
role_id | bigint | not null 
admin_id | bigint | not null 

這裏是視圖:

  View "public.v_admin_role" 
    Column |   Type   | Modifiers 
-----------+------------------------+----------- 
login  | character varying(255) | 
password | character varying(255) | 
role_name | character varying(255) | 
View definition: 
SELECT a.login, a.password, r.name AS role_name 
    FROM admin a 
    JOIN role_admins ra ON ra.admin_id = a.id 
    JOIN role r ON r.id = ra.role_id 
    WHERE a.active = true; 

而且配置

<auth-realm classname="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm" name="gcsiadmin"> 
    <property name="user-name-column" value="login"/> 
    <property name="password-column" value="password"/> 
    <property name="group-name-column" value="role_name"/> 
    <property name="datasource-jndi" value="jdbc/GcsiDS"/> 
    <property name="user-table" value="v_admin_role"/> 
    <property name="group-table" value="v_admin_role"/> 
    <property name="jaas-context" value="jdbcRealm"/> 
</auth-realm> 
+0

非常有幫助的感謝! – 2011-03-13 19:15:30