使用grails更改Spring安全性插件中的登录页面

时间:2014-12-06 10:16:01

标签: grails spring-security grails-plugin

我使用以下方式安装Spring安全性插件:

compile ":spring-security-core:2.0-RC4"

Config.groovy

中添加以下行
grails.plugins.springsecurity.auth.loginFormUrl = '/'
grails.plugins.springsecurity.failureHandler.defaultFailureUrl = '/'

但我无法使用此功能重定向到主页。

那么在哪个地方我错了?

感谢。

2 个答案:

答案 0 :(得分:1)

grails.plugins.springsecurity.auth.loginFormUrl = '/' 
grails.plugins.springsecurity.failureHandler.defaultFailureUrl = '/'

在此。您将主页设置为登录URL。现在您必须将登录数据发送到url:' /' 只需删除此字段或使用其他字段。

答案 1 :(得分:1)

Spring Security使用“/”作为默认成功Uri,使用“/ login / ajaxSuccess”作为ajax身份验证。 auth.loginFormUrl提供登录页面url,其默认值为“login / auth”。安全插件使用LoginController.groovy类来管理登录身份验证。

您已为“/”定义了控制器“仪表板”,在您的情况下,对于loginFormUrl和登录成功Url(默认情况下)都是相同的。因此,您需要实现逻辑以重定向到仪表板控制器中的不同位置。或者您可以为loginURL和successUrl使用不同的URL。

根据角色定义控制器类并实现逻辑

def springSecurityService

def index() {
    User user = springSecurityService.currentUser
    if (user) {
        if (user.authoritiesInString.contains(Authorities.ROLE_ADMIN)) {
            render "admin login "
        } else if (user.authoritiesInString.contains(Authorities.ROLE_USER)) {
            render "user login"
        }
    } else {
        redirect(uri: '/login')
    }

}

在您的URLmapping.groovy中定义“/”的映射,这是默认的成功处理程序。

static mappings = {
    "/$controller/$action?/$id?(.$format)?"{
        constraints {
            // apply constraints here
        }
    }
    "/login" controller: 'login', action: 'auth'

    "/" controller: 'main', action: 'index'


}

Spring安全插件提供了覆盖许多网址的功能,可在此处找到http://grails-plugins.github.io/grails-spring-security-core/guide/urlProperties.html