我在Java EE中遇到安全問題。 我有一個應用程序,應該是一種電子商店。我有三個實體: User類未映射到數據庫中,和兩個繼承的類 - 客戶端和管理員,被映射到不同的表:當我有幾個用戶表時,如何通過jdbcRealm提供Web應用程序的安全性
@MappedSuperclass
@Inheritance(strategy= InheritanceType.TABLE_PER_CLASS)
public class User implements Serializable {...}
@Entity
public class Client extends User {...}
@Entity
public class Administrator extends User {...}
現在我需要爲客戶機和管理員資源提供安全保障。我用jdbcRealm和非標準登錄頁面FORM認證:
<form action="j_security_check" method="POST"> <input type="text" name="j_username"/> <input type="password" name="j_password"/> <input type="submit" value="Login"/> </form>
但問題是,jdbcRealm只是指一個表。並且不允許在web.xml中設置兩個jdbcRealms。那麼如何在不改變數據庫結構的情況下爲客戶端和管理員提供身份驗證?是否可以在單個應用程序中使用幾個jdbcRealms?
非常感謝您的幫助!我對這些不同的表已經有了另一個問題,所以將所有數據放在一個表中會更好。但我是Java EE的新手,這個項目更多是爲了培訓。無論如何,如果我將管理員和客戶端數據放入同一個表中,它會有很多空白字段,所以會導致數據庫擴展。我對嗎? –
如果您可以對錶結構進行更改,那麼使用InheritanceType.JOINED和@MappedSuperclass可能會有一個USER表(具有將在JDBCRealm中使用的公共列)以及ADMINISTRATOR和CLIENT表。這些將通過id列加入。見http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html/entity.html#d0e1168(第2.2.4.3和2.2.4.4節) – beny23