我有一项服务需要通过标头进行身份验证。我有一个现有的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()
谢谢,
本
答案 0 :(得分:1)
事实证明这是一个游戏中的错误。我修补了这个并且更改被合并到主分支(https://github.com/playframework/playframework/pull/6077)中,所以如果你有类似的问题,这应该通过升级到2.5.3(如果可用)来修复