DJO*_*dle 4 grails spring-security grails-plugin
我的项目中有一个相当复杂的grails插件依赖项结构,我在安全插件中覆盖类时遇到问题.
我的结构有点像这样:
Web App
|_ Audit Plugin
|_ Spring Security Core Plugin
|_ Security Wrapper Plugin
|_ Audit Plugin
|_ Spring Security Core Plugin
Run Code Online (Sandbox Code Playgroud)
这样的原因是审计是在一些具有安全包装的应用程序之间共享的,而另一些则没有,这就是它引入Security-Core的原因(它至少需要获取当前主体的能力).
类似地,包装器在多个Web应用程序之间共享,因此我们将其放在插件中.将Spring-Security-Core升级到版本2后出现问题.
我的包装器有一个客户auth.gsp和LoginController.groovy.在旧版本的安全性中,这很好,因为插件模板化了这些并使它们在安装插件的源代码中可用.
但是现在这些文件是插件的内部文件,虽然我知道你可以在主应用程序中覆盖它们,但是当试图在另一个插件中覆盖它们时,我会得到一些奇怪的结果.
登录页面的Spring-Security-Core版本始终覆盖我的自定义登录页面.我不能让我的优先权.
第二个问题是来自Spring-Security-Core插件的LoginController.groovy有时优先于我的封装器中的一个.在构建之间似乎几乎是随机的,哪个将被使用.
有没有正确的方法来确保我的视图和控制器优先?
好好玩弄东西,我找到了一个似乎对我有用的解决方案:
首先,我无法更改插件加载的顺序,因为安全包装器对spring bean执行了很多操作,并且必须在核心插件之后加载才能使用.所以经过一些挖掘(DefaultSecurityConfig.groovy)后,我注意到你可以设置以下属性:
grails.plugin.springsecurity.failureHandler.defaultFailureUrl = '/login/authfail? login_error=1'
grails.plugin.springsecurity.failureHandler.ajaxAuthFailUrl = '/login/authfail?ajax=true'
grails.plugin.springsecurity.auth.loginFormUrl = '/login/auth'
Run Code Online (Sandbox Code Playgroud)
所以我创建了一个自定义控制器和登录页面,它与核心插件中使用的名称不同,并将这些属性更改为指向我的位置.
为了解决这个问题,在包装器的UrlMappings中(命名为:SecWrapperUrlMappings),我将/ login/**的映射放到/ seclogin/**.
确保这些新位置没有被锁定,以便人们可以访问它们,这似乎运作良好.我现在可靠地知道,无论他们使用我的登录页面和登录控制器加载哪个顺序.
| 归档时间: |
|
| 查看次数: |
807 次 |
| 最近记录: |