注意我使用的是 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
]