2014-12-08 2 views
3

Я хочу, чтобы все пользователи были аутентифицированы до доступа к моему приложению. Ниже приводится установка в Config.groovy:Grails Spring Security Статические правила

grails.plugin.springsecurity.controllerAnnotations.staticRules=[ 
    "/**": ["ROLE_ADMIN"], 
    "/login/auth": ["permitAll"] 
] 

Причина я помещал «/ логин/авторизацию»: [ «permitAll»] является то, что любой пользователь может иметь возможность войти в систему и пройти авторизацию. Однако, когда я обращаюсь к http://localhost:8080/myapp/, он перенаправляет на http://localhost:8080/myapp/login/auth и выдает ошибку: Страница не перенаправляется должным образом. Не могли бы вы сообщить, какую ошибку я совершил здесь?

+0

Посмотрите на [ответ] @monksy «s (HTTP.: //stackoverflow.com/a/29813639/16152) - это я считаю правильным решением, если вы хотите использовать защищенную аннотацию. – homaxto

ответ

4

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

grails.plugins.springsecurity.securityConfigType = 'InterceptUrlMap' 

Для второго 'permitAll' изменено на 'IS_AUTHENTICATED_ANONYMOUSLY' И третье, если весной безопасности найти /** он не видел другой под этой линией. Поэтому ваш код должен быть таким:

grails.plugins.springsecurity.securityConfigType = SecurityConfigType.InterceptUrlMap 
grails.plugins.springsecurity.interceptUrlMap = [ 
"/login/auth": ["permitAll"], 
"/**": ["ROLE_ADMIN"] 
] 
+0

Большое спасибо. Это решение. Однако при использовании SecurityConfigType я получил следующую ошибку: InterceptUrlMap : ОШИБКА: свойство 'securityConfigType' должно быть одним из 'Annotation', 'Requestmap' или 'InterceptUrlMap' или оставлено неуказанным по умолчанию 'Annotation', значение для параметра 'Annotation'. Следовательно, я изменил его на «InterceptUrlMap», и он сработал. – TrongBang

+0

@TrongBang на мой ответ отвечает :) – Koloritnij

+0

Не обязательно, чтобы он использовал тип безопасности IntercepUrlMap. Ваш метод работает, но все же можно использовать аннотации. – monksy

0

Решение от Koloritnij является правильным. Тем не менее, он бросил следующую ошибку при использовании SecurityConfigType.InterceptUrlMap:

ERROR: the 'securityConfigType' property must be one of 
'Annotation', 'Requestmap', or 'InterceptUrlMap' or left unspecified 
to default to 'Annotation'; setting value to 'Annotation' 

Я изменил его только «InterceptUrlMap», и она работала:

grails.plugins.springsecurity.securityConfigType = 'InterceptUrlMap' 
grails.plugins.springsecurity.interceptUrlMap = [ 
    "/login/auth": ["permitAll"], 
    "/**": ["ROLE_ADMIN"] 
] 
2

TrongBang и Koloritnij находятся на правильном пути , Но они не совсем корректны в контексте вашего вопроса. Они предлагают перейти к другой настройке проверки подлинности. (Что будет работать, но это не решит проблему в контексте вашей настройки.)

Если вы хотите сохранить аннотации, вам придется вызывать контроллер, который использует OAuth.

‘/springSecurityOAuth/**’: [‘permitAll’]

Плагин отображает этот путь контроллера, но статические правила по-прежнему интерпретируют контроллер и методы из этого. Для этого мне потребовалось некоторое время, чтобы это выяснить. У меня был свой же вопрос, и я писал о этом (и это включает в себя некоторые подробности о том, как работает плагин Spring Security OAuth

http://theexceptioncatcher.com/blog/2015/04/spring-security-oauth-the-missing-instructions/

Смежные вопросы