Я пытаюсь преобразовать веб-приложение Stripes в Grails. Приложение Stripes использует Spring Security, но я бы хотел, чтобы приложение Grails использовало плагин Spring Security Grails.
В приложении уже есть классы User
и Role
(Java), которые мне нужно использовать повторно, то есть я не могу использовать классы домена Grails, указанные в s2-quickstart скрипт генерирует.
Документы подключаемого модуля Spring Security описывают, как использовать существующий доменный класс User
. Шаги выглядят так:
UserDetails
, которая считывается из существующий пользовательский
класс домена UserDetailsService
, которая возвращает экземпляры (1), userDetailsService
. Однако в документации нет информации о том, как использовать существующий класс Role
и класс, который представляет устанавливает связь «многие ко многим» между пользователем
и ролью
.
Какие еще шаги необходимы для использования существующей роли
, пользователя
] и UserRole
с подключаемым модулем Grails Spring Security? Есть ли у меня какая-либо причина запускать сценарий s2-quickstart , если я не хочу создавать какие-либо классы домена?
В конце концов, что вы нужен новый
GrailsUser
Предположительно GrailsUser
здесь относится к пользовательской реализации UserDetails
? В моем случае я, вероятно, просто реализую интерфейс напрямую. Кажется ли что-то подобное разумным?
class UserAdapter implements UserDetails {
private String password
private Collection springRoles
UserAdapter(User user) {
this.password = user.password
Collection roles = // load legacy Role objects
this.springRoles = roles.collect { new GrantedAuthorityImpl(it.authority) }
}
// If using password hashing, presumably this is the hashed password?
String getPassword() {
password
}
///////// other UserDetails methods omitted
Collection getAuthorities() {
springRoles
}
}
Я не храню весь объект User
в UserAdapter
из-за вашего предупреждения о сохранении потенциально большого объекта в сеансе HTTP.
] вам нужно ..... и список экземпляров GrantedAuthority (и идентификатор, если это GrailsUser)
Если я использую свою собственную реализацию UserDetails
, как указано выше, то, по-видимому, я могу проигнорировать это комментарий о предоставлении идентификатора
?
Наконец, если я буду следовать подходу, описанному выше, должен ли я установить эти свойства в Config.groovy
и нужно ли мне для запуска сценария s2-quickstart
(или любого другого)?