2017-02-28 79 views
1

我想要一個用戶類,一個學生課程和一個教師課程。隨着學生和老師班的擴展用戶。 Hibernate和spring安全性的最佳方式是什麼?目前,我有用戶與預期的領域和:春季 - 用休眠和彈簧安全延伸課程

@OneToOne(cascade=CascadeType.ALL) 
@JoinTable(name="user_roles", 
      joinColumns = {@JoinColumn(name="user_id", referencedColumnName="id")}, 
      inverseJoinColumns = {@JoinColumn(name="role_id", referencedColumnName="id")}) 
      private Role role; 

以幫助春季安全。一切工作正常,只是使用用戶,但現在我想擴展用戶類,我真的不知道如何開始。 hibernate如何處理擴展類?我仍然可以讓學生和老師在一個大型用戶存儲庫中工作嗎?彈簧安全性如何與此一起工作?

感謝

回答

0

如果我理解你的問題正確,你想擁有Spring Security的UserDetailsS​​ervice的實現,會爲你的用戶,教師,學生實例工作。

爲了達到這個目的,您可以使用Hibernate繼承支持和多義查詢來獲取用戶信息。

Hibernate有幾種策略來表示繼承(映射超單個表加入表,每類表):http://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#entity-inheritance

映射超不適合,因爲它不支持多態查詢。其他3個。

裏面你的UserDetailsS​​ervice實現,你可以做類似

@Override 
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { 
    User user = (User) getHibernateTemplate().execute(new HibernateCallback() { 
     public Object doInHibernate(Session session) 
       throws HibernateException, SQLException { 
      Query query = session.createQuery("select u from User u where login = ?"); 
      query.setParameter(0, username); 
      return query.uniqueResult(); 
     } 
    }); 
    if (user == null) { 
     throw new UsernameNotFoundException("Unauthorized"); 
    } 

    // ... usual password check follows... 

    // ... create UserDetails as usual 
}