Spring Security на Grails и Tomcat Безопасность с Realms - PullRequest
1 голос
/ 06 сентября 2011

Я работаю с текущей версией Grails 1.3.7, программирую на устаревшей схеме БД в довольно недавней версии mySQL. Существуют таблицы для user и roles, а также третья таблица, которая связывает их в стиле m2m roles_has_user. В принципе, это нормально и, конечно, очень интересно, но стоит отметить, что таблица roles_has_user имеет две колонки: username VARCHAR(20) и rolename VARCHAR(20). Мне нужна эта структура таблиц, так как она позволяет другому приложению использовать собственный механизм аутентификации Tomcats для защиты некоторых вызовов веб-службы.

Кажется, это проблема: во-первых, я не могу получить правильное отображение m2m моих классов доменов. Может ли кто-нибудь указать мне где-нибудь объяснение использования чего-то кроме поля ID PK (даже если это сгенерированный / нестандартный идентификатор) в качестве FK в гралях м 2? Вторая проблема - я немного волнуюсь, что я никогда не собираюсь играть в эту игру с весенней безопасностью, кто-нибудь когда-либо (успешно) пытался это сделать?

Возможен вариант сопоставления взаимосвязи через другую (новую) таблицу, а затем изменение контроллеров CRUD для отражения взаимосвязей в таблице roles_has_user с использованием обязательных полей String username VARCHAR(20) и rolename VARCHAR(20). Но это звучит неуклюже ...

Спасибо за ваше время и, пожалуйста, сообщите ... если вам нужна дополнительная информация, пожалуйста, просто попросите ее, я постараюсь быть максимально ясным.

Ответы [ 2 ]

0 голосов
/ 07 сентября 2011

Вторая проблема - я немного волнуюсь, что я никогда не собираюсь играть в эту игру с весенней безопасностью. Кто-нибудь когда-либо (успешно) пытался это сделать?

Как только вы узнаете, как, плагин Spring Security легко интегрировать с устаревшими данными пользователя / роли. Под «устаревшим» я подразумеваю, что классы User и Role не создаются с помощью плагина Spring Security и могут даже не быть классами домена Grails.

Шаги:

  1. определяет UserDetails реализацию, которая читает из существующего User класса домена
  2. определяет пользовательскую UserDetailsService реализацию, которая возвращает экземпляры (1)
  3. зарегистрировать экземпляр (2) как bean-компонент Spring (например, в resources.groovy) с именем userDetailsService.

Более подробная информация доступна здесь

0 голосов
/ 06 сентября 2011

Вероятно, лучший вариант - нормализовать модель данных с помощью суррогатных ключей (т. Е. Целочисленных значений идентификаторов).

Если это не вариант, я бы попробовал сделать статическое отображение для id.Что-то вроде:

id generator: 'assigned', name: 'username', type: 'string'

Затем добавьте hasMany / hasMany + ownTo для объектов домена.

Возможно, вам также потребуется указать настраиваемое сопоставление "многие ко многим" для таблицы соединения и столбца соединения.

static mapping = {
   roles column:'username', joinTable:'ROLES_HAS_USER'
}

Это не полное рабочее решение, но, надеюсь,это приведет вас на правильный путь.Если вы столкнетесь с проблемами, опубликуйте код, чтобы у нас было что-то конкретное.

...