通过代理或者转发时不能获取serverName的解决办法

1 篇文章 0 订阅
1 篇文章 0 订阅
最近做了一个J2EE的项目,门户需要将我们的项目集成进去,但在集成时,出现问题了,单点登录完成后,后续的请求从session里取得登录信息时,却取不到,经过调试发现,request.getServerName()取得值,不是从门户来的ip,而是本机的ip,测试发现,启动项目,如果用域名访问,request.getServerName()就是域名,用ip,该值就是ip,该值一般与浏览器地址栏一致的,因这个值在我们的jsp页面会用到

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

造成在二次请求时,html的基地址成了本机地址,在浏览器中就会根据请求地址生成cookie的code不同,当然在获取session时,也是不同的,后续是拿不到第一次请求生成的session中的登录信息的。
因门户与我们不是同一个公司做的项目,我们的应用没法与他们的门户应用集成,就成了件扯皮的事,我说你得将你门户代理中,将serverName改一下,应该就没事了,但他们说改不了,而且还说别的应该都已经集成进来了,还说让我们改程序,可是要知道,我们的所有页面都有这个,那意味着,改后所有的功能都得测试一遍,这个代价太大了,所以没答应。
一个偶然事件,我发现了一个同样的问题,公司内网安装了一个正在开发的应该,因需要这个应该在外网访问,就让网管把此应该弄个外网的ip,在访问该应用时,发现在内网可以正常访问,但在用外网ip时,登录后就会现登录不成功,在外网访问时,网页不正常图2

[img]http://dl2.iteye.com/upload/attachment/0091/4297/a731ef5c-7019-3724-acbd-942f53530278.jpg[/img]

我就觉得这跟上面的问题可能是一样的,在页面中右键,查看源码

[img]http://dl2.iteye.com/upload/attachment/0091/4301/cbe1f0ea-848b-3c39-b9a0-4e2914ae7b89.jpg[/img]
果然是访问地址与base地址不一样,我觉得有戏,与是找网管,问他这个代理是用什么软件做的,他说是ISA,我就让网管打开这个软件的设置,看到了一项“转发初始主机头”,让他给勾选上

[img]http://dl2.iteye.com/upload/attachment/0091/4311/247e87c1-76a8-324e-b0a8-e3325d3d03ab.jpg[/img]

再试一下,果然有戏,一切正常,再看一下源码

[img]http://dl2.iteye.com/upload/attachment/0091/4303/da4f8ca0-9dd9-3831-bfb2-9e7e9b355ac2.jpg[/img]

访问的ip与base中的ip一样了,很高兴,把这个解决问题的过程发给门户网站的人,他们看后,就协调了他们公司的人,重新设置了一下,联调成功
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值