使用cURL进行j_security身份验证

时间:2012-08-07 10:04:34

标签: tomcat curl forms-authentication jdbcrealm

我正在使用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 -

有人有任何想法吗?

感谢您的帮助

此致

1 个答案:

答案 0 :(得分:0)

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

  1. 向受保护资源发出请求。任何人都会这样做。
  2. j_security_check发出请求,并提供j_usernamej_password个请求参数。 POST最好避免Web服务器记录凭据。如果身份验证成功,您应该获得最初在#1中请求的资源。
  3. 向您真正想要访问的受保护资源发出请求。