记录- 修复RuntimeException: java.net.ConnectException: Connection timed out;at org.jasig.cas.client.util

背景:使用springboot 集成的 cas 认证服务,流程如下:

第一次登陆子系统server,子server重定向到cas server,  cas server进行登录认证后回调回子系统, 子server 通过返回的url中携带参数ticket来捕获server颁发的ticket, 子server获取到ticket后  再次发送请求到 cas server的validate接口验证ticket有效性,有效则server返回用户的信息,子server便确定了当前用户的身份。

服务一直跑的好好的(重点),突然报了这个错误:

java.lang.RuntimeException: java.net.ConnectException: 连接超时 (Connection timed out)
    at org.jasig.cas.client.util.CommonUtils.getResponseFromServer(CommonUtils.java:443)
    at org.jasig.cas.client.validation.AbstractCasProtocolUrlBasedTicketValidator.retrieveResponseFromServer(AbstractCasProtocolUrlBasedTicketValidator.java:41)
    at org.jasig.cas.client.validation.AbstractUrlBasedTicketValidator.validate(AbstractUrlBasedTicketValidator.java:193)
    at org.jasig.cas.client.validation.AbstractTicketValidationFilter.doFilter(AbstractTicketValidationFilter.java:204)

关键的报错已经出来了,跟代码跟到了这个位置:

记录- 修复RuntimeException: java.net.ConnectException: Connection timed out;at org.jasig.cas.client.util_第1张图片

validationUrl 就是cas server的地址,其他服务都可以认证成功,包括我测试环境也可以,那么就是我本身环境出了问题,

思考一个问题:第一次认证的直接重定向到了cas server,相当于client 发出认证请求到了cas server, 这个时候是正常返回了一个:http://dos.iquantex.com/dos/_getSigutature?backurl=http%3A%2F%2Fdos.iquantex.com%2FdataTree&ticket=ST-854-Cr5NwD57j7ZVrJMCziltFl31d-g-QTBJ-AVA-APP-SSO; 这个时候 ,clinet  拿这个url 再请求 子server,  子server这时候还并不值得 client 是哪个用户, 于是,它只能 拿上面url 里的ticket=ST-854-Cr5NwD57j7ZVrJMCziltFl31d-g-QTBJ-AVA-APP-SSO  再去问 cas server,这个ticket 是谁的? 问题就出现在了 这个地方 :ConnectException: 连接超时 (Connection timed out)

于是找别的机器去 :curl http://casserver.com(这个地方写cas server地址)/sso/p3/serviceValidate?ticket=ST-879-qrOkyPS39m0N5LLMTH5I5OBD01s-QTBJ-AVA-APP-SSO&service=子 server的 认证接口 url &backurl= 子server的首页 url &authn_method=mfa-duo  发现可以成功,

我的机器 不可以,判定 我的机器 与 cas server的网络不通!!!   

找运维,他说 我那个区域的 dns 代理 换掉了!!!  给我换了个dns 地址就好了 !!!!!  wtfuck。。。

 

中间绕了很多弯路,记录一下吧,包括 代码考下来本地运行测试,

包括 对/etc/sysctl.conf文件的修改:

  1. #对于一个新建连接,内核要发送多少个 SYN 连接请求才决定放弃,不应该大于255,默认值是5,对应于180秒左右时间   
  2. net.ipv4.tcp_syn_retries=2  
  3. #net.ipv4.tcp_synack_retries=2  
  4. #表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为300秒  
  5. net.ipv4.tcp_keepalive_time=1200  
  6. net.ipv4.tcp_orphan_retries=3  
  7. #表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间  
  8. net.ipv4.tcp_fin_timeout=30    
  9. #表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。  
  10. net.ipv4.tcp_max_syn_backlog = 4096  
  11. #表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭  
  12. net.ipv4.tcp_syncookies = 1 
  13. #表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭  
  14. net.ipv4.tcp_tw_reuse = 1  
  15. #表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭  
  16. net.ipv4.tcp_tw_recycle = 1 
  17. ##减少超时前的探测次数   
  18. net.ipv4.tcp_keepalive_probes=5   
  19. ##优化网络设备接收队列   
  20. net.core.netdev_max_backlog=3000

包括重新修改hosts文件啊。。。

包括 netstat -an查看netstat -an 所有 TIME_WAIT 的连接,如果想关闭最终需要重启机器!! 我最终也做了。。。

你可能感兴趣的:(Linux网络基础,网络)