【问题标题】:j_security authentication using cURL使用 cURL 的 j_security 身份验证
【发布时间】:2012-08-04 07:51:31
【问题描述】:

当用户关注受保护的页面时,我正在使用 Tomcat JDBCRealm 对经过身份验证的用户进行身份验证。到达受保护页面时,身份验证正常工作。现在我想使用 cURL 自动化这个过程。我已经写了下面的代码,但它不起作用:

$domainUrl = "http://mydomain.com/protectedArea?j_username=john&j_password=doe";
$ch = curl_init ();
curl_setopt ( $ch, CURLOPT_URL, $domainUrl );
//curl_setopt ( $ch, CURLOPT_POST, true );
//curl_setopt ( $ch, CURLOPT_POSTFIELDS, $post );
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true); 
curl_setopt ( $ch, CURLOPT_TIMEOUT, 7 );

$output = curl_exec ( $ch );
curl_close ( $ch );

在 tomcat 日志中我们只能看到 http GET :

[07/Aug/2012:11:51:24 +0200] GET http://mydomain.com/protectedArea?j_username=john&j_password=doe HTTP/1.1 200 1618

而我们应该有这样的东西:

[07/Aug/2012:11:57:06 +0200] GET http://mydomain.com/protectedArea?j_username=john&j_password=doe HTTP/1.1 200 1516
[07/Aug/2012:11:57:06 +0200] POST http://mydomain.com/j_security_check HTTP/1.1 302 -

有人知道吗?

感谢您的帮助

问候

【问题讨论】:

  • 注意:您不应该将JDBCRealm 用于任何真正重要的事情。相反,请使用 DataSourceRealm,它的配置几乎相同,但使用连接池并且不是单线程的。

标签: tomcat curl forms-authentication jdbcrealm


【解决方案1】:

看起来您只有一个 curl_exec 调用...您是否期​​望一个调用会导致对服务器的两个单独请求?您必须执行以下操作才能将基于表单的登录脚本编写到符合规范的服务器:

  1. 向受保护的资源发出请求。任何人都可以。
  2. j_security_check 发出请求,并包含j_usernamej_password 请求参数。 POST 是避免 Web 服务器记录凭据的好主意。如果认证成功,你应该会得到#1中最初请求的资源。
  3. 向您真正想要访问的受保护资源发出请求。

【讨论】:

    猜你喜欢
    • 2015-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    • 2013-08-17
    • 2017-09-15
    • 2013-12-29
    • 1970-01-01
    相关资源
    最近更新 更多