【问题标题】:grails spring security rest plugin how to skip url from authenticationgrails spring security rest插件如何从身份验证中跳过url
【发布时间】:2014-09-06 22:02:19
【问题描述】:

我在我的 grails 应用程序中使用 spring security rest 插件和核心,我希望有一些无需身份验证即可访问的调用,为此我在操作中添加 @Secured('permitAll') 但它不是工作,它仍在要求令牌。 我也试过 '/api/getdata': ['permitAll'] in config.groovy,但没有结果!!!

【问题讨论】:

    标签: spring rest grails


    【解决方案1】:

    使用静态映射..

        grails.plugin.springsecurity.controllerAnnotations.staticRules = [
            '/':                              ['permitAll'],
            '/user/someaction1':             ['permitAll'],
            '/user/someaction1':                 ['permitAll'],
    ]
    

    【讨论】:

    • 你是否在grails.plugin.springsecurity.userLookup.userDomainClassName中指定了域类
    • 是的,rest 安全工作正常,我的问题是要跳过某些调用的身份验证部分,比如我有一个调用 api/getData,我希望在没有身份验证的情况下提供这个调用,即不需要登录.
    • 我自己没试过,但这应该会有所帮助,看看here
    【解决方案2】:

    您需要将匿名过滤器添加到过滤器链中。 如果您按照 grails spring security rest 配置教程进行操作,您可能会得到以下代码:

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

    请注意,您有 "-anonymousAuthenticationFilter" ,它会从您的过滤器链中删除此过滤器。 通过从您的代码中删除这部分(-anonymousAuthenticationFilter),此过滤器将返回到您的过滤器链, 所以你可以再次使用@Secured("permitAll") 或@Secured(['IS_AUTHENTICATED_ANONYMOUSLY'])。

    我的最终过滤器链图如下,效果很好。

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

    当您需要查看有关身份验证过程的更多详细信息时,将其添加到开发环境中的 logback.groovy

    logger("org.springframework.security", DEBUG, ['STDOUT'], false)
    logger("grails.plugin.springsecurity", DEBUG, ['STDOUT'], false)
    logger("org.pac4j", DEBUG, ['STDOUT'], false)
    
    logger("StackTrace", ERROR, ['FULL_STACKTRACE'], false)
    root(ERROR, ['STDOUT', 'FULL_STACKTRACE'])
    

    如果您不使用弹簧安全休息,同样的想法也适用。 我在另一个帖子中给出了相同的答案,不知道该怎么办。

    【讨论】:

      猜你喜欢
      • 2015-07-30
      • 2019-03-20
      • 2015-03-28
      • 2013-11-13
      • 2015-03-13
      • 2013-12-16
      • 2017-03-06
      • 2017-04-28
      • 2014-03-18
      相关资源
      最近更新 更多