2011-01-28 2 views
1

아마도 savon에 대한 관용구 코드를 작성하지 않았을 수 있으므로 제발 편하게 생각해보십시오.하지만 동일한 클라이언트에서 여러 요청을하려고했습니다.wsse 인증을 사용하는 Savon에서 내 nonce 토큰이 후속 요청에서 다시 사용됩니다.

client=Savon::Client.new { 
    wsdl.document=wsdl_path 
} 

r1=client.request(:company_get_report_suites) do 
    wsse.credentials APP_CONFIG['omniture']['username'],APP_CONFIG['omniture']['shared_secret'],:digest 
end 

r2=client.request(:scheduling_get_reports_run_history) do 
    wsse.credentials APP_CONFIG['omniture']['username'],APP_CONFIG['omniture']['shared_secret'],:digest 
end 

두 번째 요청은 nonce를 다시 사용하여 끝납니다. wsse nonce의 요점은 한 번만 사용하는 것입니다. 그래서 제가 호출하는 서비스는 내가 그것을 재사용하고 요청을 서비스하는 것을 거부한다고 불평합니다. 내 첫 번째 생각은 타임 스탬프를 추가하는 것이지만 도움이되지 않았다. 실제로 소스 코드는 nonce가 설정된 경우 사용되며 이전에 설정되지 않은 경우에만 생성된다는 것을 보여줍니다.

분명히 필자가해야한다면 새로운 클라이언트를 만들 수 있지만 이것은 꽤 무겁고 동일한 클라이언트에서 여러 요청을 생성하는 일반적인 방법이 될 것 같지 않습니다.

현명한 해결 방법이 있습니까?

답변

0

이 날 더러운 느낌,하지만 아무도 더 나은 대안을 제시 할 수 없다면,이 트릭을 수행합니다

class Savon::WSSE 
    def reset_nonce 
    @nonce=nil 
    @nonce=nonce 
    end 
end 

r1=client.request(:company_get_report_suites) do 
    wsse.reset_nonce 
end