有什么方法可以将我的JAVA客户端中的URL(查询参数)中的任何参数转发到CAS?
示例:http://www.myclient.com?name=A&age=23
目前,当我的请求被转发到CAS时,查询参数被删除,CAS不知道参数。我想将这些参数发送给CAS。
或者说我希望CAS收到的服务网址是包含所有参数的完整网址。
请建议。
答案 0 :(得分:0)
在CasAuthenticationEntryPoint方法开始时,通过调用createServiceUrl(request,response)方法创建服务url。
此方法然后进一步调用
<code>
CommonUtils.constructServiceUrl(null, response, this.serviceProperties.getService(), null, this.serviceProperties.getArtifactParameter(), this.encodeServiceUrlWithSessionId);
</code>
参数:
请求HttpServletRequest
响应HttpServletResponse
为配置的服务URL提供服务(如果不为null,则使用此服务)
serverName服务器名称,用于在服务参数为空时构建服务URL的服务器名称
artifactParameterName要删除的工件参数名称(即票证)
编码是否编码网址(即Jsession)。
constructServiceUrl - &gt;从HttpServletRequest或给定的serviceUrl构造服务URL。如果serviceUrl和serviceName都提供了serviceUrl。
在我的情况下,我在cas配置文件中提供了服务url,因此检入constructServiceUrl
<code>
if (CommonUtils.isNotBlank(service)) {
return encode ? response.encodeURL(service) : service;
}
</code>
简单地发送回编码的服务URL ...而不附加查询字符串。 您还可以在上面看到,默认情况下,null请求对象被发送到constructServiceUrl,因此不会考虑查询参数。
解决方案: 我从CasAuthenticationEntryPoint扩展了CasAuthenticationEntryPoint并覆盖方法&#34; createServiceUrl&#34;因为它在超级班级受到保护......让它按照我想要的方式行事。