Обновление от stark-security до весеннего плагина безопасности - PullRequest
1 голос
/ 14 июня 2011

Я недавно обновил Grails проекта с 1.0.5 до 1.3.7.В проекте используется плагин Stark-security (0.4.3), и я хотел бы заменить его на плагин Spring-security (последний).Я понимаю, что Stark-security как-то основана на Spring-security.

Насколько Spring-security отличается от Stark-security и как мне подойти и решить проблему?

Stark-security статические авторизации = [...] используется в изобилии во всей системе, и я просто надеюсь, что мне не нужно переопределять функциональность чем-то совершенно другим ..

1 Ответ

3 голосов
/ 15 июня 2011

Stark использует Spring Security 2.0, как и плагин Acegi, а более новый плагин Spring Security Core использует Spring Security 3, поэтому все они используют в основном одни и те же библиотеки.

Нет концепцииКонфигурирование правил безопасности на уровне класса в Spring Security Core, но существует несколько подходов к указанию правил - аннотации (по умолчанию), карта в Config.groovy, которая определяет все правила, и хранение правил в базе данных с экземплярами Requestmap.Они описаны в разделе «5 Настройка сопоставления запросов для защищенных URL-адресов» по ​​адресу http://burtbeckwith.github.com/grails-spring-security-core/docs/manual/

Например, вот как я могу преобразовать пример из документации по плагину Stark для использования аннотаций с Spring Security Core:

import grails.plugins.springsecurity.Secured

class BookController {

   @Secured(['isAuthenticated()'])
   def index = { Book.list() }

   @Secured(['ROLE_EDITOR'])
   def edit = {
      // Some logic to edit a book
   }
}

Существует одно важное различие в подходе между двумя плагинами.Stark запрещает доступ, если для URL не определено ни одного правила, поэтому вам нужно иметь сопоставления для всего.Это безопаснее, потому что если вы добавите новый контроллер и забудете отобразить его, аутентифицированные пользователи не смогут получить к нему доступ, поэтому ясно, что что-то не так.Чтобы включить это в Spring Security Core, просто добавьте строку

grails.plugins.springsecurity.rejectIfNoRule = true

в grails-app/conf/Config.groovy

...