java - 将url参数转发给CAS

标签 java spring cas

有什么方法可以将 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/

相关文章:

java - 在 Java 中如何使用对象引用作为 while 循环条件?

java - 如何让我的 JWindow 窗口始终保持焦点

java - throws x extends Exception 方法签名

java - 升级 Spring Security 破坏了一个项目

spring - 如何确定 Spring Controller 方法的参数?

spring - 如何让CAS返回正确的Spring页面

cas - CAS 和 Keycloak 有什么区别?

java - 检测 Calendar.set() 上的无效日期

java - @GeoPointField Elasticsearch 的错误映射

c# - 在 ASP.NET Core 6 MVC 应用程序上创建 SSO(单点登录)CAS