использовать существующие классы домена с подключаемым модулем Spring Security

Я пытаюсь преобразовать веб-приложение Stripes в Grails. Приложение Stripes использует Spring Security, но я бы хотел, чтобы приложение Grails использовало плагин Spring Security Grails.

В приложении уже есть классы User и Role (Java), которые мне нужно использовать повторно, то есть я не могу использовать классы домена Grails, указанные в s2-quickstart скрипт генерирует.

Документы подключаемого модуля Spring Security описывают, как использовать существующий доменный класс User . Шаги выглядят так:

  1. определяют реализацию UserDetails , которая считывается из существующий пользовательский класс домена
  2. определяет настраиваемую реализацию UserDetailsService , которая возвращает экземпляры (1),
  3. регистрируют экземпляр (2) как компонент Spring с именем 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 (или любого другого)?

6
задан Community 23 May 2017 в 11:54
поделиться