Ошибка при использовании плагина Spring-Security в Grails

Я пытался интегрировать spring-security в одно из моих приложений Grails. Как уже упоминалось в руководстве по весенней безопасности, я установил плагин, используя следующий код.

BuildConfig.groovy: я добавил следующий код

repositories {
mavenRepo 'http://repo.spring.io/milestone'
}

plugins {
compile ':spring-security-core:2.0-RC2'
}

Позже я очистил код и скомпилировал его, чтобы обеспечить загрузку зависимостей. Я также проверил папку .grails, чтобы убедиться, что зависимости загружены.

Затем я создал классы User и Role. (Примечание: я назвал классы Person и Authority соответственно).

После этого я создал SecureController и не добавил никаких аннотаций доступа к безопасности, но все равно не могу получить доступ к безопасному контроллеру. Элемент управления напрямую перенаправляет на контроллер входа в систему.

Вопрос 1: Дело в том, что после использования весеннего плагина безопасности каждая страница нуждается в аутентификации. Есть ли способ получить доступ к странице без входа в систему

Затем я добавил аннотацию @Secured к SecureController. Аннотация @Secured вообще не обнаруживается, хотя она присутствует в папке плагинов для проекта. Сначала я подумал, что что-то упустил, поэтому я снова создал проект, начав выполнять те же шаги. Однако на этот раз плагин обнаруживается

Вопрос 2. Почему подключаемый модуль spring-security ведет себя так непоследовательно?

Я попытался получить доступ к SecureController без входа в систему, я получаю следующую ошибку.

EL1008E: (поз. 0): поле или свойство «ADMIN_ROLE» не найдено в объекте типа «org.springframework.security.web.access.expression.WebSecurityExpressionRoot»

Я также получаю ту же ошибку после входа в систему и попытки доступа к контроллеру.

Вопрос 3: Я пропустил какие-либо зависимости, которые необходимо указать.

На странице входа форма ведет к некоторому действию 'j_security_check'. Я не заметил этого действия ни в одном из контроллеров.

Вопрос 4. Нужно ли мне создавать новое действие с таким названием

Пожалуйста, помогите мне разобраться в этом вопросе. Заранее большое спасибо за помощь.


person Rammohan    schedule 15.12.2013    source источник
comment
Один вопрос на вопрос :)   -  person Burt Beckwith    schedule 15.12.2013
comment
Привет, Берт, не могли бы вы рассказать мне, почему я получаю ошибку WebSecurityExpressionRoot.   -  person Rammohan    schedule 15.12.2013
comment
@Rammohan, это еще один вопрос (пожалуйста, откройте новый), вам нужно предоставить информацию журнала, чтобы мы могли вам помочь.   -  person Ignacio Ocampo    schedule 15.12.2013


Ответы (1)


После установки подключаемого модуля необходимо запустить s2-quickstart, чтобы получить базовую конфигурацию.

Если вы хотите переименовать классы по умолчанию, вам нужно указать Spring Security в файле Config.groovy:

grails.plugins.springsecurity.userLookup.userDomainClassName = 'sys.Usuario'
grails.plugins.springsecurity.userLookup.authorityJoinClassName = 'sys.UsuarioRol'
grails.plugins.springsecurity.authority.className = 'sys.Rol'
// This last two lines if you're using Requestmap Instances method for protect your resources
grails.plugins.springsecurity.requestMap.className = 'sys.Requestmap'
grails.plugins.springsecurity.securityConfigType = 'Requestmap'

Строка ниже предназначена для отклонения всех запросов, если для этих ресурсов не существует правила.

grails.plugins.springsecurity.rejectIfNoRule = true

Как видно из документации. У вас есть 4 различных формы для защиты ваших ресурсов.

  1. Защищенные аннотации
  2. Простая карта в Config.groovy
  3. Экземпляры Requestmap, хранящиеся в базах данных
  4. Использование выражений для создания описательных, детализированных правил

Я согласен с Бертом, пожалуйста, по одному вопросу на вопрос.

person Ignacio Ocampo    schedule 15.12.2013