【问题标题】:Adding REST authentication to Grails + SpringSecurity browser app将 REST 身份验证添加到 Grails + SpringSecurity 浏览器应用程序
【发布时间】:2012-12-13 19:21:58
【问题描述】:

我在 STS 3.1 中有一个 Grails 应用程序,在 UrlMappings.groovy 和一组控制器中布置了一个 REST API。我安装了 SpringSecurity 的东西,所以我有 Login/Logout 控制器和 RegistrationCodeController 等。我一直在使用浏览器界面登录,但我需要从 REST 客户端开始登录。

我需要使用哪些具体的 url 和请求来注册/登录/检查登录/注销?

我已经能够通过将 j_username 和 j_password 发布到 /j_spring_security_check 来登录。但是,如果我首先发出一个未通过身份验证的请求,那么 POST 到 /j_spring_security_check 会自动返回初始失败请求的结果。我需要一种登录方式,它总是返回成功/错误状态和成功时的 User.id。

【问题讨论】:

    标签: rest authentication grails spring-security


    【解决方案1】:

    在 Config.groovy 中,插入一些配置项:

    grails.plugins.springsecurity.successHandler.alwaysUseDefault = true
    grails.plugins.springsecurity.successHandler.defaultTargetUrl = "/rest/success"
    grails.plugins.springsecurity.failureHandler.defaultFailureUrl = "/rest/failed"
    

    这将强制将成功登录重定向到 /rest/success。然后在这个方法中,返回user.id:

    import grails.converters.JSON
    class RestController {
    
        def springSecurityService
    
        def success() {
            def response = ['status':'success', 'id':springSecurityService.currentUser.id]
            render response as JSON
        }
    
        def failed() {
            def response = ['status': 'failed']
            render response as JSON
        }
    }
    

    【讨论】:

    • 我明白为什么这应该有效。不幸的是,当我第一次请求需要身份验证的控制器,然后我 POST 到 /j_spring_security_check 时,我仍然被重定向到第一个请求的响应。我应该通过其他请求登录而不是 POST 到 /j_spring_security_check 吗?
    • 我认为发布到它很好,因为原始身份验证登录表单具有相同的内容。是否适用于网页直接登录场景?
    • defaultTargetUrl 重定向适用于网页登录,但不适用于来自我的休息客户端的 POST。
    • 该请求是 Ajax 请求吗?然后你应该定义successHandler. ajaxSuccessUrlfailureHandler. ajaxAuthFailUrl。在问题中发布一些代码可能会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 2018-12-13
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 2019-11-21
    • 2014-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多