从Play Framework向WS客户端中的WSRequest添加标头

时间:2016-04-22 10:10:35

标签: scala playframework webservice-client

我有一项服务需要通过标头进行身份验证。我有一个现有的java客户端,它为我生成值。我正在尝试使用WSRequestHeaderFilter将标头应用于ws请求。

我断点时代码似乎运行正常,我可以看到标题已应用。但是在我的测试服务器中(使用播放SIRD路由器)标题似乎没有被应用?

如何使用过滤器或此类方法在请求中显示所需的标题?

请参阅以下代码:

过滤:

class saisir_soumission(osv.osv):
    _name='saisir.soumission' 

    def compa_date(self,cr,uid,ids,args,fields,context=None):       
        r = {}
        date_format = "%Y-%m-%d %H:%M:%S"
        joining_date = 'Date_ouv_pli'
        current_date = fields.datetime.now()
        d1 = datetime.strptime(joining_date, date_format)
        d2 = datetime.strptime(current_date, date_format)
        days = (d2 - d1).days   
        return days

   _columns = {
       'NumOffre' : fields.char('N° Offre'),
       'organisme_s' : fields.char('Organisme'),
       'caution' : fields.float('Caution'),
       'Date_ouv_pli' : fields.date('Date Ouverture Plis'), #field to be entered 
       'observation_d' : fields.text('Observation'),
       'compar' : fields.function(compa_date,string='Jours Restants'),
 
      }

在客户端使用:

class AuthenticatingFilter @Inject() (authHeaderGenerator: AuthHeaderGenerator) extends WSRequestFilter  {
      def apply(executor: WSRequestExecutor): WSRequestExecutor = {
        new WSRequestExecutor {
          override def execute(request: WSRequest): Future[WSResponse] = {
            val headers = authHeaderGenerator.generateRequestHeaders(request.method, request.uri.toString, null).asScala.toList
            executor.execute(request.withHeaders(headers:_*))
          }
        }
      }
    }

测试:

//code omitted for brevity
def getStuff() = ws.url(s"${baseUrl}/authenticatedEndpoint").withRequestFilter(filter).get()

谢谢,

1 个答案:

答案 0 :(得分:1)

事实证明这是一个游戏中的错误。我修补了这个并且更改被合并到主分支(https://github.com/playframework/playframework/pull/6077)中,所以如果你有类似的问题,这应该通过升级到2.5.3(如果可用)来修复