【问题标题】:Getting 400 Bad Request with Grails Spring Security Rest Plugin使用 Grails Spring Security Rest 插件获取 400 错误请求
【发布时间】:2016-03-01 13:33:29
【问题描述】:

我正在尝试 grails restful spring security rest 插件。 我正在使用带有 spring-security-rest:1.5.2 的 Grails 2.5.2。 我无法使用以下 ajax 调用进行登录。我收到 400 个错误请求。但是,如果我尝试使用 CURL 命令,它会起作用!我不明白怎么了。

这是 ajax post 调用:

var config = {
            type : 'POST'
            ,url : '/api/login'
            ,data : {username:"xxxx",password:"xxxx"}
            ,async : false
            ,dataType : 'JSON'
            ,contentType: "application/json;charset=utf-8"
            ,success: function(response) {
                console.dir(response);
            }
            ,error : function (response) {
                console.dir(response);
            }
        }

        $.ajax(config);

Config.groovy里面的Spring rest插件配置是:

grails.plugin.springsecurity.filterChain.chainMap = [
    '/api/**': 'JOINED_FILTERS,-exceptionTranslationFilter,-authenticationProcessingFilter,-securityContextPersistenceFilter,-rememberMeAuthenticationFilter',  // Stateless chain
    '/**': 'JOINED_FILTERS,-restTokenValidationFilter,-restExceptionTranslationFilter'                                                                          // Traditional chain
]

grails.plugin.springsecurity.rest.login.active=true
grails.plugin.springsecurity.rest.login.failureStatusCode=401
grails.plugin.springsecurity.rest.token.validation.active=true

这是我的 curl 命令:

curl -i -X POST -H "Content-Type: application/json" -d '{"username":"xxxxx", "password":"xxxx"}' http://localhost:8080/api/login

这就是回应:

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Cache-Control: no-store
Pragma: no-cache
Content-Type: application/json;charset=UTF-8
Content-Length: 2172
Date: Tue, 01 Mar 2016 13:28:42 GMT

{"username":"xxxxxx","roles":["ROLE_ADMIN"],"token_type":"Bearer","access_token":"eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE0NTY4NDI1MjIsInN1YiI6ImFkbWluZGllIiwicHJpbmNpcGFsIjoiSDRzSUFBQUFBQUFBQUpWU3YwOFVRUlIrZXg2QlNLSmdnb2tGTm1KbjloTG92RWJBMDJDV3czQmNnNGxrYnZleERqYzdzODdNSG5jTnVVb0xDZ2hJWXVLXC93SDhpalgrQWdZS1cydFkzeThFZU5JU3BkdDk4Kzczdnh4NWZ3SWpSTUJkcnhvWHhVNUhGWFBvbTFWekdCc05NYzl2ek00TTZRcHNqM3VmQUprM2c4bmdsOEFJbzhjakNrMkNMZFZoRk1CbFhWbHBiR05wcVY4T3MwdkdBY1ZPekJMZVZidnZYM0tIU2VHTkJRZTI5S2NIb09reXlNRlNadEhVb................... etc.etc.

非常感谢任何帮助!

【问题讨论】:

  • 您是否尝试在浏览器中打开调试器并检查您向服务器发送的具体内容?如果您调试请求,您将检查它与工作 curl 版本之间的差异并修复它。

标签: spring rest grails


【解决方案1】:

基于official docs,您应该将 dataType 更改为 'json':

dataType(默认:Intelligent Guess(xml、json、script 或 html))

顺便说一句,您是否尝试从配置中删除 async : false 并检查它?

【讨论】:

  • 您好,Michal,谢谢您的回答。我刚刚找到了解决方案。我必须使用 JSON.stringify 函数发布数据……这就是问题所在!当然是我的错。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-24
  • 2016-03-03
  • 1970-01-01
  • 2017-09-26
  • 2014-12-06
  • 2017-08-19
  • 1970-01-01
相关资源
最近更新 更多