Я пытаюсь преобразовать веб-приложение Stripes в Grails. Приложение Stripes использует Spring Security, но я бы хотел, чтобы приложение Grails использовало плагин Spring Security Grails.
В приложении уже есть классы User
и Role
(Java), которые мне нужно повторно использовать, т. Е. Я не могу использовать классы домена Grails, которые генерирует сценарий s2-quickstart .
Документы плагина Spring Security описывают, как использовать существующий класс домена User
. Похоже, шаги:
- определяет
UserDetails
реализацию, которая читает из существующего User
класса домена
- определяет пользовательскую
UserDetailsService
реализацию, которая возвращает экземпляры (1)
- зарегистрировать экземпляр (2) как bean-компонент Spring с именем
userDetailsService
.
Однако документы не предоставляют никакой информации о том, как использовать существующий класс Role
и класс, представляющий отношение «многие ко многим» между User
и Role
.
Какие еще шаги необходимы для использования существующих классов Role
, User
и UserRole
с плагином Grails Spring Security? Есть ли какая-то причина, по которой я могу запустить скрипт s2-quickstart , если я не хочу создавать какие-либо доменные классы?
Последующие вопросы к ответу Берта
В конце концов, вам нужен новый GrailsUser
Предположительно GrailsUser
здесь относится к пользовательской реализации UserDetails
? В моем случае я, вероятно, просто реализую интерфейс напрямую. Кажется ли что-то подобное разумным?
class UserAdapter implements UserDetails {
private String password
private Collection<GrantedAuthority> springRoles
UserAdapter(User user) {
this.password = user.password
Collection<Role> 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<GrantedAuthority> getAuthorities() {
springRoles
}
}
Я не храню весь объект User
в UserAdapter
из-за вашего предупреждения о сохранении потенциально большого объекта в сеансе HTTP.
вам нужно ..... и список экземпляров GrantedAuthority (и идентификатор, если это GrailsUser)
Если я использую свою собственную реализацию UserDetails
, как указано выше, то, вероятно, я могу проигнорировать этот комментарий о предоставлении id
?
Наконец, если я буду следовать описанному выше подходу, я должен установить эти свойства в Config.groovy
и нужно ли мне запускать сценарий s2-quickstart
(или любой другой)?