Думаю, вы захотите взглянуть на реализации, уже предоставленные сообществом серверов приложений.Как правило, вы описали определение аутентификации на основе форм.
http://tomcat.apache.org/tomcat-5.5-doc/config/realm.html
В сущности, отношения таковы:
User
+ Role[]
После настройки это позволяет использовать такие инфраструктуры, как JSF (но вы заметите, что я получаю доступ кTomcat сессия здесь), чтобы запросить конкретную роль.Приведенный ниже код взят из базовой схемы аутентификации на основе форм, которую я использую в небольшом веб-приложении, и она крайне нуждается в рефакторинге, у меня только что были более высокие приоритеты
public boolean isUserInRole(Roles role)
{
return FacesContext.getCurrentInstance().getExternalContext().isUserInRole(role.getRoleValue());
}
В этом случаеRoles - это тип перечисления (со слабым именем), который хранится в моей сущности «Role»:
@Entity
@Table(name = "role", uniqueConstraints = @UniqueConstraint(columnNames = { "user_user", "role" }))
public class Role implements Serializable
{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@ManyToOne(targetEntity = User.class, fetch = FetchType.LAZY)
private User user;
private String role;
public Long getId()
{
return id;
}
public void setId(Long id)
{
this.id = id;
}
public User getUser()
{
return user;
}
public void setUser(User user)
{
this.user = user;
}
public String getRole()
{
return role;
}
public void setRole(String role)
{
this.role = role;
}
}
В результате создаются таблицы (как я указал поля), поэтому я могу предоставить SQL-запрос дляКонфигурация и создать царство.Есть много хорошей документации по этому вопросу, если вы Google "j_security_check".
Что касается группы?Для меня группа звучит как набор ролей - поэтому не сложно перестроить запрос в третью таблицу или просто предоставить перечисление.
(после прочтения этого единственное разъяснение состоит в том, чтомои роли хранятся в enum, который содержит строковое значение роли, поэтому role.getValue () возвращает строку, подобную «administrator».