grails - 如何为Grails 3.x配置Spring Security Rest

标签 grails gradle spring-security

如何为Grails 3.x配置Spring Security Rest Plugin(当前我正在使用Grails 3.1.0 RC2)。

插件页面上说“向您的:spring-security-rest:${version}添加编译BuildConfig.groovy”,但是BuildConfig.groovy已从Grails 3.x中删除。

编辑:插件页面上的文档已更新

最佳答案

所以我得到了这个工作。首先,位于[here] [1]的文档是最新的。您需要将以下内容添加到build.gradle
build.gradle

dependencies {

    //Other dependencies

    compile "org.grails.plugins:spring-security-rest:2.0.0.M2"
}

接下来,您需要运行Spring Security快速入门
grails s2-quickstart com.yourapp Person Role

最后,您需要配置过滤器链,但将以下内容添加到application.groovy中。

application.groovy
grails.plugin.springsecurity.filterChain.chainMap = [
    //Stateless chain
    [
        pattern: '/api/**',
        filters: 'JOINED_FILTERS,-anonymousAuthenticationFilter,-exceptionTranslationFilter,-authenticationProcessingFilter,-securityContextPersistenceFilter,-rememberMeAuthenticationFilter'
    ],

    //Traditional chain
    [
        pattern: '/**',
        filters: 'JOINED_FILTERS,-restTokenValidationFilter,-restExceptionTranslationFilter'
    ]
]

替代方法:
我决定将配置移动到application.yml,因此我没有使用两种不同的配置语法。

替代配置1:
使用application.yml和标准默认设置
grails:

    # other config values

    plugin.springsecurity:
        userLookup.userDomainClassName: 'com.company.product.Person'
        userLookup.authorityJoinClassName: 'com.company.product.PersonRole'
        authority.className: 'com.company.product.Role'
        controllerAnnotations.staticRules:    
            - {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']}
        filterChain.chainMap:
            - {pattern: '/assets/**', filters: 'none'}
            - {pattern: '/**/js/**', filters: 'none'}
            - {pattern: '/**/css/**', filters: 'none'}
            - {pattern: '/**/images/**', filters: 'none'}
            - {pattern: '/**/favicon.ico', filters: 'none'}
              #Stateless chain
            - {pattern: '/api/**', filters: 'JOINED_FILTERS,-anonymousAuthenticationFilter,-exceptionTranslationFilter,-authenticationProcessingFilter,-securityContextPersistenceFilter,-rememberMeAuthenticationFilter'}
                  #Traditional chain
                - {pattern: '/**', filters: 'JOINED_FILTERS,-restTokenValidationFilter,-restExceptionTranslationFilter'}

我也(这是完全可选的)
  • 删除了所有与服务GSP有关的生成配置,因为我的应用只是一个API
  • 配置插件以使用GORM
  • 保留授权 token
  • 将默认的承载 token 配置替换为X-Auth-Token配置

  • 所以我结束了这个

    替代配置2:
    仅使用具有API的application.yml(无GSP)和GORM token 存储并使用X-Auth-Tokens(而不是Bearer Tokens)
    grails:
    
        # other config values
    
        plugin.springsecurity:
            userLookup.userDomainClassName: 'com.company.product.Person'
            userLookup.authorityJoinClassName: 'com.company.product.PersonRole'
            authority.className: 'com.company.product.Role'
            filterChain.chainMap:
                #Stateless chain
                - {pattern: '/**', filters: 'JOINED_FILTERS,-anonymousAuthenticationFilter,-exceptionTranslationFilter,-authenticationProcessingFilter,-securityContextPersistenceFilter,-rememberMeAuthenticationFilter'}
            rest.token:
                    storage.gorm.tokenDomainClassName: 'com.company.product.AuthenticationToken'
                    validation:
                        useBearerToken: false
                        headerName: 'X-Auth-Token'
    

    关于grails - 如何为Grails 3.x配置Spring Security Rest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35062081/

    相关文章:

    grails - Rejected value [null] 错误即使在分配给属性后

    grails - grails独特的投影获取不同项目的结果计数

    android - gradle 3.1.2 依赖库的产品风格

    gradle - 如何让子项目在多项目构建中选择自己的存储库配置?

    gradle - 为maven.url解释Gradle DSL魔术

    java - Spring MVC session 最大生命周期

    grails - 将PropertyEditor关联到特定 Controller

    grails - 如何清除和替换 Grails/Groovy 中一对多关系中的集合

    spring - 使用自定义 Spring 安全注解

    permissions - spring-security 编写自定义 PermissionEvaluator - 如何注入(inject) DAO 服务?