我正在从事一个springMVC项目,在该项目中,用户身份验证基于spring安全性。
这样做的目的是让移动(android)应用程序能够向后端发送某种数据。
因此,在着手开发android之前,我决定使用cURL来模拟登录表单的情况。
本网站的登入表格如下:
http://localhost:8080/app/user/login我使用以下命令:
curl -F 'username=admin&password=admin' http://localhost:8080/app/user/login但是,我将获得登录页面,换句话说,我无法通过基于模拟情况的用户身份验证。
请注意:对于每个请求,spring安全将创建一个随机令牌,类似于:
8863F732ADDE24CD167F4EF502A4333D
如何使用模拟情况( cURL或HTTPClient)传递基于spring安全性的登录表单
发布于 2012-10-24 13:31:31
像这样使用cURL:
curl -d j_username=admin -d j_password=admin -L http://localhost:8080/app/j_spring_security_checkCSRF
如果您得到类似于Expected CSRF token not found. Has your session expired?的内容,这意味着启用了CSRF令牌保护。要用cURL测试它,您需要一个cookie和一个CSRF令牌本身。
下面的命令将将所有cookie写入名为cookie的文件,并输出CSRF令牌。Security默认令牌参数名为_csrf,如果您已经更改了它,那么也需要更改grep csrf。
curl --cookie-jar cookie -L http://localhost:8080/app/j_spring_security_check | grep csrf然后可以执行next命令,该命令将从文件中传递所有cookie。不要忘记用一个实际值替换|your_token_value|,该值由前面的命令打印出来(如果您更改了它,则使用_csrf参数名)。
curl --cookie cookie -d "j_username=admin&j_password=admin&_csrf=|your_token_value|" -L http://localhost:8080/app/j_spring_security_check从SpringSecurity3.x到4.x
注意,在SpringSecurity4.x中,login-processing-url的默认值从/j_spring_security_check变为POST /login,username-parameter的默认值从j_username变为username,password-parameter的默认值从j_password变为password。如果应用程序显式地提供了这些属性,则迁移不需要任何操作。
发布于 2012-10-24 12:17:42
您应该配置spring以支持基本身份验证。然后将以下标题添加到请求中:
Authorizationbase64(username:password)这意味着用户名和密码应该合并为一个字符串,其中包含:作为分隔符,然后使用BASE64转换进行转换。
发布于 2016-06-20 19:03:16
根据投票最多的答案,我编写了以下脚本:
#!/usr/bin/env bash
curl --cookie-jar cookie -L http://localhost:PORT/secureDomain/secureURL
TOKEN=$( cat cookie | grep 'XSRF' | cut -f7 )
curl --cookie cookie -u admin:admin -d "_csrf=$TOKEN" -L http://localhost:PORT/secureDomain/secureURL为Security 4工作。
https://stackoverflow.com/questions/13048954
复制相似问题