0

我们正在使用带有 mongodb 的 grails 2.3.5 应用程序(未安装休眠)。我已经使用 HQL 查询分叉和修改了 grails 数据库会话插件,以使用简单查询以支持 mongodb。

然后,当我尝试通过 ajax 登录时,它失败了。失败,我的意思是,会话创建并持久化到数据库但无法登录。当我启用日志时,我看到 cookie/j_spring_security_check在身份验证后出现在请求路径中,但在重定向后不可用,即在/login/ajaxSuccess导致身份验证被视为错误的路径中,并创建了一个新会话。

我们的 URL 映射配置如下所示:(无关紧要)

"/$controller/$action?/$id?(.$format)?" {
     constraints {
     }
}

"/v2/$customController/action/$customAction" {
    controller = {
        return params.customController?.toUpperCamelCase()
    }
    action = {
        return params.customAction?.toUpperCamelCase()
    }
}

"/v2/$resource/$resourceId?/$subResource?/$subResourceId?" {
    controller = {
        if (params.subResource) {
            return params.subResource.toUpperCamelCase()
        }
        return params.resource.toUpperCamelCase()
    }
    action = {
        Map actionMethodMap = [GET: params.resourceId ? "show" : "index", POST: "save", PUT: "update", DELETE: "delete"]
        return actionMethodMap[request.method.toUpperCase()]
    }
    id = {
        if (params.subResource && params.subResourceId) {
            return params.subResourceId
        }
        return params.resourceId
    }
}

对于 Spring Security,我们的配置如下所示:

grails.plugins.springsecurity.authority.className = 'com.test.Role'
grails.plugins.springsecurity.userLookup.userDomainClassName = 'com.test.User'
grails.plugins.springsecurity.userLookup.authorityJoinClassName = 'com.test.UserRole'
grails.plugins.springsecurity.useSessionFixationPrevention = true

//grails.plugins.springsecurity.redirectStrategy.contextRelative = true
grails.plugins.springsecurity.successHandler.defaultTargetUrl = "/app/ng/index.html"
grails.plugins.springsecurity.auth.loginFormUrl = "/app/ng/index.html#/auth/signin"
grails.plugins.springsecurity.auth.ajaxLoginFormUrl = "/v2/login/action/auth-ajax"
grails.plugins.springsecurity.ui.encodePassword = false
grails.plugins.springsecurity.controllerAnnotations.staticRules = [
    '/j_spring_security_switch_user': ['ROLE_ADMIN'],
    '/ck/standard/filemanager':    ['ROLE_ADMIN'],
    '/ck/standard/uploader':    ['ROLE_ADMIN'],
    '/ck/ofm/filemanager':    ['ROLE_ADMIN'],
    '/ck/ofm/filetree':    ['ROLE_ADMIN'],
    '/quartz/**': ["ROLE_ADMIN"],
    '/**'          : ['IS_AUTHENTICATED_ANONYMOUSLY']
]

除此之外,grails.serverURL所有环境的配置都被注释以支持通配符子域。

使用:

Spring Security Core 插件版本 1.2.7.3
Cookie 插件版本 0.51
Webxml 插件版本 1.4.1
Mongodb 插件版本 2.0.1

4

0 回答 0