【问题标题】:Spring Security Grails 3.0 YML MappingsSpring Security Grails 3.0 YML 映射
【发布时间】:2016-06-25 09:55:08
【问题描述】:

我正在查看 grails spring security core v3 的文档。 Grails Spring Security Plugin v3 我的目标是在 yml 文件中配置 url 映射,而不是分散在整个代码中。他们的文件说,要做到这一点,我们必须做两件事。首先,设置

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']]
            ]

但是,当尝试使用新建的 war 文件访问我的网页时,我收到一条错误消息:

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 文件中,我当然不想走那条路。

我是否在这里遗漏了一些需要设置的明显属性?

【问题讨论】:

    标签: grails spring-security


    【解决方案1】:

    查看该错误后,我尝试使用地图列表创建映射。 所以你的代码会变成这样:

    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 应用程序上使用了它,它似乎工作得很好。

    【讨论】:

    • 完美适用于 3.1.2!谢谢!
    【解决方案2】:

    由于某种原因,在 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']}
    

    【讨论】:

      【解决方案3】:

      改变这个:

      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']}
      

      到这里:

      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']}
              ]
      

      【讨论】:

        猜你喜欢
        • 2016-02-16
        • 2015-08-12
        • 2012-09-27
        • 2016-01-30
        • 2015-04-29
        • 2012-03-29
        • 2015-08-18
        • 2011-08-14
        • 1970-01-01
        相关资源
        最近更新 更多