CAS 服务器只接受来自 localhost 的请求
我使用 CAS 服务器来处理 Tomcat 服务器中的 Web 应用程序的身份验证,当我从 localhost 发送请求时一切正常,例如:https://localhost:8443/WebApp。
但是,例如,如果我想从虚拟机发送请求,我将使用主机的专用网络 IPv4 地址,如下所示: https://192.168.1.13:8443/WebApp。
但我得到一个异常: java.lang.IllegalArgumentException: unrecognized server name : 192.168.1.13:8443
我尝试在 Windows 上编辑主机文件,添加:192.168.1.13 localhost,但没有帮助。我还将 cas.properties 中的服务器名称属性从 http://localhost:8080 更改为 https: //192.168.1.13:8443 但也没有帮助。
我的问题是,如何让 CAS 服务器接受非来自 localhost 的请求?即使来自 127.0.0.1,它也不会接受,除非它说 localhost?
完整的堆栈跟踪:
мар 18, 2022 7:31:15 ПО ПОДНЕ org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [rest.api.CASServlet] in context with path [/Documents] threw exception
java.lang.IllegalArgumentException: unrecognized server name : 192.168.1.13:8443
at edu.yale.its.tp.cas.client.Util.getService(Util.java:72)
at edu.yale.its.tp.cas.client.filter.CASFilter.getService(CASFilter.java:492)
at edu.yale.its.tp.cas.client.filter.CASFilter.redirectToCAS(CASFilter.java:513)
at edu.yale.its.tp.cas.client.filter.CASFilter.doFilter(CASFilter.java:378)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.jasig.cas.client.session.SingleSignOutFilter.doFilter(SingleSignOutFilter.java:94)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:659)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)
at org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:261)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1722)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:831)
мар 18, 2022 7:31:15 ПО ПОДНЕ org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [default] in context with path [/Documents] threw exception
java.lang.IllegalArgumentException: unrecognized server name : 192.168.1.13:8443
at edu.yale.its.tp.cas.client.Util.getService(Util.java:72)
at edu.yale.its.tp.cas.client.filter.CASFilter.getService(CASFilter.java:492)
at edu.yale.its.tp.cas.client.filter.CASFilter.redirectToCAS(CASFilter.java:513)
at edu.yale.its.tp.cas.client.filter.CASFilter.doFilter(CASFilter.java:378)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.jasig.cas.client.session.SingleSignOutFilter.doFilter(SingleSignOutFilter.java:94)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:659)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)
at org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:261)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1722)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:831)
I'm using CAS server to handle authentication for my web apps within Tomcat server, and everything works fine when I send requests from localhost like: https://localhost:8443/WebApp.
But if I want to send request from my virtual machine for example, I would use private network IPv4 address of my host and that would look like: https://192.168.1.13:8443/WebApp.
But I get an exception: java.lang.IllegalArgumentException: unrecognized server name : 192.168.1.13:8443
I tried editing hosts file on Windows by adding: 192.168.1.13 localhost, but no help. I also changed server name property in cas.properties
from http://localhost:8080 to https://192.168.1.13:8443 but also no help.
My question is, how can I make CAS server to accept requests that are not from localhost? It won't accept even from 127.0.0.1, only if it says localhost?
Full stack trace:
мар 18, 2022 7:31:15 ПО ПОДНЕ org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [rest.api.CASServlet] in context with path [/Documents] threw exception
java.lang.IllegalArgumentException: unrecognized server name : 192.168.1.13:8443
at edu.yale.its.tp.cas.client.Util.getService(Util.java:72)
at edu.yale.its.tp.cas.client.filter.CASFilter.getService(CASFilter.java:492)
at edu.yale.its.tp.cas.client.filter.CASFilter.redirectToCAS(CASFilter.java:513)
at edu.yale.its.tp.cas.client.filter.CASFilter.doFilter(CASFilter.java:378)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.jasig.cas.client.session.SingleSignOutFilter.doFilter(SingleSignOutFilter.java:94)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:659)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)
at org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:261)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1722)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:831)
мар 18, 2022 7:31:15 ПО ПОДНЕ org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [default] in context with path [/Documents] threw exception
java.lang.IllegalArgumentException: unrecognized server name : 192.168.1.13:8443
at edu.yale.its.tp.cas.client.Util.getService(Util.java:72)
at edu.yale.its.tp.cas.client.filter.CASFilter.getService(CASFilter.java:492)
at edu.yale.its.tp.cas.client.filter.CASFilter.redirectToCAS(CASFilter.java:513)
at edu.yale.its.tp.cas.client.filter.CASFilter.doFilter(CASFilter.java:378)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.jasig.cas.client.session.SingleSignOutFilter.doFilter(SingleSignOutFilter.java:94)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:659)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)
at org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:261)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1722)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:831)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
是的,这些都不相关。
你不这样做也不可能,因为问题不在于 CAS 服务器。您的日志显示请求在首次到达您的应用程序时已停止:
请注意其中的单词
cas.client
。这意味着,CAS 服务器中没有任何内容可以修改,因为您需要修复客户端应用程序以正确接受请求。大多数情况下,CAS 并不关心请求来自哪里(除非非常非常特殊的情况)。
PS 您的日志还显示您的启用 CAS 的应用程序正在使用
edu.yale.its.tp.cas.client
,这是 Java CAS 客户端库的古老版本,已停止使用且尚未发布。修补、更新或修改已超过 15 年。您可能希望重新考虑。Yes, none of this is relevant.
You don't and you can't because the problem is not with the CAS server. Your logs show that the request is stopped when it reaches your application first:
Note the word
cas.client
in there. This means, there is nothing in the CAS server that would be modified because you need to fix the client application to accept requests correctly.CAS does not care where the request comes from for the most part (except in very very special circumstances).
PS Your logs also show that your CAS-enabled application is using
edu.yale.its.tp.cas.client
which is an ancient version of the Java CAS client library that has been discontinued and has not been patched, updated or modified for well over 15 years. You may wish to reconsider.