2016-03-10 4 views
0

Я смотрю документацию о сердечнике ярости весны Grails v3. Grails Spring Security Plugin v3 Моя цель - настроить сопоставление url в файле yml, а не разбросано по всему коду. В их документации говорится, что для этого мы должны сделать две вещи. Во-первых, установитеВесенняя безопасность Grails 3.0 YML-сопоставления

securityConfigType: 'InterceptUrlMap' 

, а затем очертить наши модели в следующем формате:

grails.plugin.springsecurity.interceptUrlMap = [ 
    [pattern: '/',    access: ['permitAll']] 
] 

, так что я сделал только что, в коде ниже: (Обратите внимание, что это из их документации, скопированный и вставили)

grails: 
    plugin: 
     springsecurity: 
      securityConfigType: 'InterceptUrlMap' 
      interceptUrlMap: [ 
       [pattern: '/',    access: ['permitAll']], 
       [pattern: '/error',   access: ['permitAll']], 
       [pattern: '/index',   access: ['permitAll']], 
       [pattern: '/index.gsp',  access: ['permitAll']], 
       [pattern: '/shutdown',  access: ['permitAll']], 
       [pattern: '/assets/**',  access: ['permitAll']], 
       [pattern: '/**/js/**',  access: ['permitAll']], 
       [pattern: '/**/css/**',  access: ['permitAll']], 
       [pattern: '/**/images/**', access: ['permitAll']], 
       [pattern: '/**/favicon.ico', access: ['permitAll']], 
       [pattern: '/login/**',  access: ['permitAll']], 
       [pattern: '/logout/**',  access: ['permitAll']] 
      ] 

Однако при попытке получить доступ к моей веб-страницы, с недавно построенного военного файла, я получаю сообщение об ошибке с этим:

groovy.lang.MissingMethodException: No signature of method: grails.plugin.springsecurity.ReflectionUtils$_splitMap_closure5.doCall() is applicable for argument types: (java.util.ArrayList) values: [[[pattern:/], [access:[permitAll]]]] 
Possible solutions: doCall(java.util.Map), findAll(), findAll(), isCase(java.lang.Object), isCase(java.lang.Object) 

Я не уверен, в чем проблема. Если я сделаю Grails 3.0, используйте скрипт s2-quickstart, созданный в стиле groovy, все работает по назначению. Однако, учитывая, что 100% моей другой конфигурации находится в файле YML, я, конечно, не хочу идти по этому маршруту.

Я пропустил какое-то очевидное свойство здесь, которое необходимо установить?

ответ

3

Посмотрев на эту ошибку, я попытался создать сопоставления, используя список карт. Так что ваш код, превратится в нечто вроде этого:

interceptUrlMap: [ 
    {pattern: '/',    access: ['permitAll']}, 
    {pattern: '/error',   access: ['permitAll']}, 
    {pattern: '/index',   access: ['permitAll']}, 
    {pattern: '/index.gsp',  access: ['permitAll']}, 
    {pattern: '/shutdown',  access: ['permitAll']}, 
    {pattern: '/assets/**',  access: ['permitAll']}, 
    {pattern: '/**/js/**',  access: ['permitAll']}, 
    {pattern: '/**/css/**',  access: ['permitAll']}, 
    {pattern: '/**/images/**', access: ['permitAll']}, 
    {pattern: '/**/favicon.ico', access: ['permitAll']}, 
    {pattern: '/login/**',  access: ['permitAll']}, 
    {pattern: '/logout/**',  access: ['permitAll']} 
] 

Я использовал это на моем местном Grails 3.0 приложения, и это, кажется, работает нормально.

+1

Отлично работает для 3.1.2! Спасибо! –

+0

отлично! работает и для меня – angryip

0

Это не помогло мне по некоторым причинам в 3.2.4. Вот что сделал:

interceptUrlMap: 
    - {pattern: '/password/change**', access: ['IS_AUTHENTICATED_REMEMBERED']} 
    - {pattern: '/user/create', access: ['IS_AUTHENTICATED_ANONYMOUSLY']} 
    - {pattern: '/user/save', access: ['IS_AUTHENTICATED_ANONYMOUSLY']} 
    - {pattern: '/user/**', access: ['IS_AUTHENTICATED_REMEMBERED']} 
    - {pattern: '/my/**', access: ['IS_AUTHENTICATED_REMEMBERED']} 
    - {pattern: '/j_spring_security_exit_user', access: ['IS_AUTHENTICATED_REMEMBERED']} 
    - {pattern: '/j_spring_security_switch_user', access: ['ROLE_ADMIN', 'ROLE_SWITCH_USER']} 
    - {pattern: '/admin/**', access: ['ROLE_ADMIN']} 
Смежные вопросы