我正在从 grails 2.2.2 迁移到 grails 2.3.4 以避免 2.2.2 中的错误,即 spring 安全属性消息中的文本值未显示,但我遇到了各种问题。以前有用的东西,现在不行了。
问题
当我运行 grails 应用程序时,初始默认页面是 index.gsp 这是标准功能,但在安装和配置 spring 安全核心、spring 安全 ldap 和 spring securiy ui 插件后,我想制作 /login/auth 我的默认页面。
在之前的版本中,我是通过 完成的。 UrlMappings.groovy 通过简单地注释、替换或删除这一行来修改配置文件
"/"(view:"/index")
对于这个
"/"(view:"/login/auth")
我的 Config.groovy 是这样设置的,如果认证成功就带我到首页
grails.plugin.springsecurity.userLookup.userDomainClassName = 'security.Person'
grails.plugin.springsecurity.userLookup.authorityJoinClassName = 'security.PersonAuthority'
grails.plugin.springsecurity.authority.className = 'security.Authority'
grails.plugin.springsecurity.requestMap.className = 'security.Requestmap'
grails.plugin.springsecurity.securityConfigType = 'Requestmap'
grails.plugin.springsecurity.successHandler.defaultTargetUrl = '/home/'
和我在 Bootstrap 中的 Requestmap 条目(如果它们对这个问题有任何重要性,如下所示):
for (String url in [
'/', '/index', '/index.gsp', '/**/favicon.ico',
'/**/js/**', '/**/css/**', '/**/images/**',
'/login', '/login.*', '/login/*',
'/logout', '/logout.*', '/logout/*']) {
new Requestmap(url: url, configAttribute: 'permitAll').save()
}
new Requestmap(url: '/home/*', configAttribute: 'IS_AUTHENTICATED_FULLY').save()
事实证明,当我这样做时... Eureka 登录/身份验证 应用程序一启动就会出现,但是当我输入正确的身份验证凭据时,它似乎没有进行身份验证,它确实会“轻微闪烁”并再次显示出来。
但是,如果我删除这一行
"/"(view:"/login/auth")
然后把这个放回去
"/"(view:"/index")
然后当我重新启动应用程序时,我手动到 登录/身份验证 并输入正确的凭据,然后它会正确地将我带到主页。
问题
提前致谢。
最佳答案
Spring Security 中的身份验证机制通过在显示登录页面时跟踪引用 URL 来工作。然后在成功登录后重定向到此页面。如果您希望登录页面成为人们看到的第一个页面,只需让根 View 需要身份验证。我假设您的应用程序的大部分(如果不是全部)都需要身份验证。如果是这种情况,您不需要将登录页面设为根 View 。假设 /home/*
下的所有内容被锁定,那么 Spring Security 将检测到并在请求任何安全页面时立即重定向到登录页面。
长话短说,你让它变得比需要的更难。
至于你的第二个问题,我相信你只需要在你的应用程序中创建你自己的这些文件版本来自定义它们。
关于authentication - 如何使 Grails Spring Security 2.0 中的登录/页面成为初始屏幕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20711601/