Curl Global Community
Curl ORB でIDとパスワードを必ず渡したい - Printable Version

+- Curl Global Community (https://communities.curl.com)
+-- Forum: Discussions (https://communities.curl.com/forumdisplay.php?fid=1)
+--- Forum: General Curl questions (https://communities.curl.com/forumdisplay.php?fid=2)
+--- Thread: Curl ORB でIDとパスワードを必ず渡したい (/showthread.php?tid=670)



Curl ORB でIDとパスワードを必ず渡したい - umemura - 12-18-2012

サーバーとのやりとりの間にセッションタイムアウトをさせたくないので、
アクセスのたびにログインする仕組みを考えています。

ユーザーIDとパスワードをログイン時にグローバル変数に保持して、
CurlORB のサービスを呼ぶときに、必ず引数のDTOの中にID・PASSを指定することで実現させようと思っていますが、
プログラマに意識させずに、AOPのような感じでサービスを呼ぶときに自動的にDTOにID・PASSを詰めることはできないでしょうか。



RE: Curl ORB でIDとパスワードを必ず渡したい - umemura - 12-18-2012

インターセプターを利用すれば可能です。
サービスの引数として、ID・パスワードを保持するための基本となるDTOを必ず利用するとよいかと思います。

Code:
|| インターセプター
{define-class public InitializeDtoIntercepto {inherits ClientInterceptor}
{constructor public {default
client-filter:{proc-type {AbstractClient}:bool} ={fn client => true}
}
{construct-super client-filter = client-filter}
}
{method protected open {handle-before-request ||before-advice
http-request-headers:#HttpRequestHeaders,
orb-request-hearders:#HashTable,
method:Method,
arguments:#FastArray
}:(http-request-headers:#HttpRequestHeaders, orb-request-headers:#HashTable)
{if-debuggable {output method.defining-class.name, ".", method.name }}
{if-non-null args = arguments then
{for arg in args do
{type-switch arg
||基本DTOにIDとパスワードを設定
case base:BaseDto do
set base.id = id
set base.pass = pass
}
}
}
def (ret-http-request-headers:#HttpRequestHeaders, ret-orb-request-headers:#HashTable) =
{super.handle-before-request
http-request-headers,
orb-request-hearders,
method ,
arguments
}
{return ret-http-request-headers, ret-orb-request-headers}
}

}
||インターセプターの登録
{register-orb-interceptors
{InitializeDtoInterceptor}
}


バージョンが古いですが、インターセプターの説明は下記にあります。
http://developers.curlap.com/re-reference/42-curl-orb-for-java06/226-interceptor.html



RE: Curl ORB でIDとパスワードを必ず渡したい - hokada - 12-19-2012

もしくは、handle-before-request メソッドの引数であるorb-request-headersに追加することで、サーバサイドのFilterなどで受け取ることもできます。