有什么方法可以将 URL 中的任何参数(查询参数)从 JAVA 客户端转发到 CAS?
示例:http://www.myclient.com?name=A&age=23
目前,当我的请求转发到 CAS 时,查询参数将被删除,并且 CAS 不知道这些参数。我想将这些参数发送给 CAS。
或者说我希望 CAS 接收的服务 url 是完整的 url,包括它具有的所有参数。
请提出建议。
最佳答案
在 CasAuthenticationEntryPoint 方法开始时,通过调用 createServiceUrl(request, response) 方法创建服务 url。
此方法随后进一步调用
<code>
CommonUtils.constructServiceUrl(null, response, this.serviceProperties.getService(), null, this.serviceProperties.getArtifactParameter(), this.encodeServiceUrlWithSessionId);
</code>
参数:
请求 HttpServletRequest
响应 HttpServletResponse
service 配置的服务url(如果不为空则使用)
serverName 如果服务参数为空,则用于构造服务 url 的服务器名称
artifactParameterName 要删除的工件参数名称(即票证)
encode 是否对 url 进行编码(即 Jsession)。
constructServiceUrl -> 从 HttpServletRequest 或给定的 serviceUrl 构造服务 URL。如果同时有 serviceUrl 和 serviceName,则首选提供的 serviceUrl。
在我的例子中,我已经在 cas 配置文件中提供了服务 url,因此检查了 ConstructionServiceUrl
<code>
if (CommonUtils.isNotBlank(service)) {
return encode ? response.encodeURL(service) : service;
}
</code>
简单地发回编码后的服务 URL...而不附加查询字符串。 您还可以在上面观察到,默认情况下,空请求对象会发送到constructServiceUrl,因此不会考虑查询参数。
解决方案: 我从 CasAuthenticationEntryPoint 扩展了 CasAuthenticationEntryPoint 并重写了方法“createServiceUrl”,因为它在父类(super class)中受到保护...使其按照我想要的方式运行。
关于java - 将url参数转发给CAS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22962812/