我们有一个Grails 1.3.7应用程序,它使用LDAP和自定义登录屏幕来处理安全性和授权。用户角色在web.xml
中设置,并映射到WAS 8服务器上的组。
升级到Grails 2.1.0后,我们注意到登录失败不会重定向到相应的gsp页面,在我们的例子中是fail_login.gsp。相反,URL更改为fail_login.gsp,但实际呈现的页面是原始login.gsp。
web.xml文件是使用grails install-templates
生成的,对它的唯一更改是添加安全角色,安全性约束和登录配置部分。
<security-role>
<description>View</description>
<role-name>VIEW</role-name>
</security-role>
<security-role>
<description>Admin</description>
<role-name>ADMIN</role-name>
</security-role>
<security-constraint>
<web-resource-collection>
<web-resource-name>user</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>VIEW</role-name>
<role-name>ADMIN</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<realm-name>Java EE Login</realm-name>
<form-login-config>
<form-login-page>/login.gsp</form-login-page>
<form-error-page>/fail_login.gsp</form-error-page>
</form-login-config>
</login-config>
我们的UrlMappings.groovy与1.3.7版本相同。
class UrlMappings {
static mappings = {
"/$controller/$action?/$id?"{
constraints {
// apply constraints here
}
}
"/"(view:"/index")
"500"(view:'/error_beam')
"404"(controller: "error", action: "notFound")
"403"(view:'/fail_login')
"/log4jAdmin/dynamicLog4jAdmin.gsp"(controller: 'log4jAdmin', action: 'log4jAdmin')
"/dynamicLog4jAdmin.gsp"(controller: 'log4jAdmin', action: 'log4jAdmin')
}
}
如果登录有任何问题,我在web.xml中的在线阅读<form-error-page>/fail_login.gsp</form-error-page>
应该重定向到该页面。如果没有别的403错误也应映射到该页面。登录工作正常,因此它不是安全角色或其映射的问题。有什么想法吗?
[UPDATE]
看起来web.xml无法在其当前目录/views/fail_login.gsp
中找到fail_login.gsp页面。将login和fail_login页面移动到/web-app/gsps
下可以修复fail_login.gsp未呈现的问题,但它也会更改可能是交易破坏者的登录URL。我找不到任何关于web.xml在form-login-config部分中查找gsps的文档,特别是Grails 1.3.7和2.1.0之间是否应该有所不同