1

注意我使用的是 Grails 2.0.4 和 spring security core plugin 1.2.7.2

这似乎是一个错误,但我想确保我首先正确地做事。基本上,我希望某些 URL 使用 HTTPS 保护,而其余的则不是,这似乎很标准。如果用户访问非安全 URL,我不希望他们停留在 HTTPS 上。一切正常,直到我添加这一行来完成最后一点:

    '/**':          'REQUIRES_INSECURE_CHANNEL'

此时由于某种原因,我所有的安全控制器名称都被“grails”重写,事情变得非常糟糕。例如,如果我去

http://localhost:8080/login/index

它成为了

http://localhost:8080/grails/auth/index.dispatch 

(“grails”不是我的应用程序的名称,我也没有任何名为“grails”的控制器 - 我的应用程序在根目录下运行)

如果我删除根通配符的那个条目,一切正常,我不再在我的 URL 中得到那个奇怪的“grails”,尽管我在我想要保护的页面之外的 https 上停留。

这是我的完整配置。请注意,安全页面不会尝试加载我可以看到的任何不安全资源,只会加载在“ANY_CHANNEL”下定义的内容

grails.plugins.springsecurity.secureChannel.definition = [
        '/login/**':         'REQUIRES_SECURE_CHANNEL',
        '/register/**':         'REQUIRES_SECURE_CHANNEL',
        '/changePassword/**':         'REQUIRES_SECURE_CHANNEL',
        '/userAccountManagement/**':    'REQUIRES_SECURE_CHANNEL',


        '/simpleCaptcha/**': 'ANY_CHANNEL',
        '/img/**':        'ANY_CHANNEL',
        '/images/**':        'ANY_CHANNEL',
        '/static/**':        'ANY_CHANNEL',

        '/**':          'REQUIRES_INSECURE_CHANNEL'  //remove this, everything OK

]
4

1 回答 1

1

URI来自/grails/controller/action.dispatchGrails URL 映射机制。Grails 中的 URL 映射由 servlet 过滤器实现,该过滤器将请求(在 RequestDispatcher 意义上)转发到/grailsURI,而正是这些过滤器驱动 DispatcherServlet。

我怀疑这里发生的事情/**是导致通道安全过滤器在这些转发的请求 URI 以及原始的预映射 URI 上触发。/grails/**如果您在规则前面放置一个明确的 ANY_CHANNEL 是否有效/**

于 2012-05-31T23:26:13.310 回答