ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Apache TomcatコミュのTomcat (6.0.16)のCookie制御変更によるアプリの対応

  • mixiチェック
  • このエントリーをはてなブックマークに追加
はじめまして目がハート
次の案件について
これまでapche-Tomcat (5.5.17)の環境でクライアントアプリからPost
メソッドを使ってパラメータを送信しサーバにログインしておりましたが、
サーバ側でapche-Tomcat (6.0.16)にバージョンアップされてから以前使って
いたアプリからログインできなくなりました。

いろいろ調べてみて
イコール等を含むクッキーを使用しているWebアプリケーションはTomcat
5.5.26以降で正常に動作しないようになりますとのことまではわかりましたが、
アプリ側での改修がうまくできません。
何方かご存知の方のお知恵をお借りしたいと思います。

ちなみにアプリはVB.NET 2005バージョンで作成しています。
以下、ソースコードの一部です

Shared Function HttpPost(ByVal url As String, ByVal vals As Hashtable,
ByVal cc As CookieContainer) As String
Dim param As String = ""

For Each k As String In vals.Keys
param += String.Format("{0}={1}&", k, vals(k))
Next

param = "password=xxxxx&loginID=0001&cpaCD=xxxxxxxx&"
Console.WriteLine(param)

Dim data As Byte() = System.Text.Encoding.ASCII.GetBytes(param)

' リクエストの作成
Dim req As HttpWebRequest _
= CType(WebRequest.Create(url), HttpWebRequest)
req.Method = "POST"
req.ContentType = "application/x-www-form-urlencoded"
req.ContentLength = data.Length
req.CookieContainer = cc
req.Timeout = 10000

'サーバ証明書を信用する
ServicePointManager.ServerCertificateValidationCallback =
New RemoteCertificateValidationCallback(AddressOf OnRemoteCertifi
cateValidationCallback)

' ポスト・データの書き込み
Dim reqStream As Stream = req.GetRequestStream()
reqStream.Write(data, 0, data.Length)
reqStream.Close()

Dim res As WebResponse = req.GetResponse()

'受信したCookieのコレクションを取得する
Dim cookies As CookieCollection = req.CookieContainer.GetCookies
(req.RequestUri)

Dim ix As Integer
Dim result As String = ""

'クッキー名"yyyyyyyyy"を取得
For ix = 0 To cookies.Count - 1
If cookies.Item(ix).Name = "yyyyyyyyy" Then
'"id"の切り出し
Dim values As String() = cookies.Item(ix).Value.Split
("&")

For Each str As String In values
If str.IndexOf("id=") >= 0 Then
Dim id As String = str.Substring(Len
("id="))
result = id
Exit For
End If
Next
End If
Console.WriteLine(cookies.Item(ix).Name & " = " & cookies.
Item(ix).Value)
Next

Return result
End Function


5.5.17の時はこの処理で受信Cookieを取得できましたが、6.0.16ではうまく
いきません。
param = "password=xxxxx&loginID=0001&cpaCD=xxxxxxxx&"

パラメータにイコールなど含まれているためだと思いますが
その回避方法はあるでしょうか?


コメント(3)

昨日リリースされたばかりの6.0.24には、イコールを含むCookieを許可するようなオプションが付け加えられていますね。
Tomcatのシステムプロパティに

org.apache.tomcat.util.http. ServerCookie.ALLOW_EQUALS_IN_VALUE=true

を設定すれば回避できるような気がします。
一度試してみてはどうでしょうか。

以下参照
 http://tomcat.apache.org/tomcat-6.0-doc/config/systemprops.html

プロパティ名に余計な半角スペースが入ってしまっているので、コピーするときは注意してください。。
>>アムジーさん
 ありがとうございます目がハート
 サーバ管理人にお願いしてみます手(パー)

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Apache Tomcat 更新情報

Apache Tomcatのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。