发布在服务器上的代码
任意客户端访问平台,获取平台本地配置里的ip
public static void main(String[] args)
{
try
{
// 获取计算机名
String name = InetAddress.getLocalHost().getHostName();
// 获取IP地址
String ip = InetAddress.getLocalHost().getHostAddress();
System.out.println("计算机名:"+name);
System.out.println("IP地址:"+ip);
}
catch (UnknownHostException e)
{
System.out.println("异常:" + e);
e.printStackTrace();
}
}
任意客户端访问平台,获取平台的ip
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。如果使用了反向代理软件,用request.getRemoteAddr()方法获取的IP地址是:127.0.0.1或192.168.1.110,而并不是客户端的真实IP。
经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的 IP,服务器端应用也无法直接通过转发请求的地址返回给客户端。但是在转发请求的HTTP头信息中,增加了X-FORWARDED-FOR信息。用以跟踪原有的客户端IP地址和原来客户端请求的服务器地址。当我们访问index.jsp/时,其实并不是我们浏览器真正访问到了服务器上的index.jsp文件,而是先由代理服务器去访问index.jsp ,代理服务器再将访问到的结果返回给我们的浏览器,因为是代理服务器去访问index.jsp的,所以index.jsp中通过request.getRemoteAddr()的方法获取的IP实际上是代理服务器的地址,并不是客户端的IP地址。
于是可得出获得客户端真实IP地址的方法一:
public String getRemortIP(HttpServletRequest request) {
if (request.getHeader("x-forwarded-for") == null) {
return request.getRemoteAddr();
}
return request.getHeader("x-forwarded-for");
}
获得客户端真实IP地址的方法二:
public String getIpAddr(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
可是,如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP值,究竟哪个才是真正的用户端的真实IP呢?
答案是取X-Forwarded-For中第一个非unknown的有效IP字符串。如:
X-Forwarded-For:192.168.1.110, 192.168.1.120, 192.168.1.130, 192.168.1.100
用户真实IP为: 192.168.1.110
、、、、、、、、、、、、、、、、、、、、、、、、、、、
jsp中
<%
String appPath = request.getContextPath();
//配置map服务器的ip地址和端口号 by秦冲
// String mapIp = "localhost:8080";
String mapIp = request.getServerName() + ":"
+ request.getServerPort();
%>
function getContextPath() {
var location = document.location;
var contextPath = location.pathname;
var index = contextPath.substr(1).indexOf("/");
contextPath = contextPath.substr(0, index + 1);
delete index;
<span style="background-color: rgb(255, 255, 102);">mapIp2 </span>= location.host;
<span style="background-color: rgb(255, 255, 102);">serviceName </span>= contextPath;
}
Flex获取通过服务器ip图片地址
/**
* 访问的地址
* */
private var uri:String=FlexGlobals.topLevelApplication.url
this.infoImg.source=uri.substring(0, uri.indexOf("/Atms/")) + "/AtmsImg/" + filename;
Flex获取全局变量,可以放ip
// 全局权限对象
private var authContext:GlobalAuthorityContext=new GlobalAuthorityContext();
package com.zteits.atms.authority.scripts
{
import com.zteits.atms.login.flash.vo.OperatorVO;
import com.zteits.atms.util.Componment.CarNumTextInput;
import com.zteits.atms.util.string.StringUtil2;
import flash.display.DisplayObject;
import flash.net.SharedObject;
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.controls.Button;
import mx.controls.ComboBox;
import mx.controls.DataGrid;
import mx.controls.Label;
import mx.controls.Tree;
import mx.core.UIComponent;
public class GlobalAuthorityContext
{
private var menuXml:String;
private var operCodes:ArrayCollection;
private var resCodes:ArrayCollection;
private var operatorVO:OperatorVO;
private var language:String;
public function GlobalAuthorityContext()
{
var so:SharedObject=SharedObject.getLocal("GlobalContext", "/");
if (so != null)
{
this.operatorVO=OperatorVO(so.data.operatorVO);
this.resCodes=ArrayCollection(so.data.resCodes);
this.operCodes=ArrayCollection(so.data.operateCodes);
this.menuXml=String(so.data.menuXml);
this.language=String(so.data.language)
}
}
public function clearGlobalAuthorityContext():void
{
if (this.operatorVO != null)
this.operatorVO=null;
if (this.operCodes != null)
this.operCodes=null;
if (this.resCodes != null)
this.resCodes=null;
if (this.menuXml != null)
this.menuXml=null;
if (this.language != null)
this.language=null;
}
public function getLanguage():String
{
return this.language;
}
public function getOperCodes():ArrayCollection
{
return this.operCodes;
}
public function getResCodes():ArrayCollection
{
return this.resCodes;
}
public function getOperatorVO():OperatorVO
{
return this.operatorVO;
}
public function getMenuXml():String
{
return this.menuXml;
}
// 返回资源查询条件
public function getResourceAuthConditions():String
{
var conditions:String="";
if (resCodes != null && resCodes.length > 0)
{
conditions=" in (";
for (var i:int=0; i < resCodes.length; i++)
{
conditions=conditions + "'" + resCodes.getItemAt(i).toString() + "',";
}
conditions=conditions.substr(0, conditions.length - 1);
conditions=conditions + ") ";
}
return conditions;
}
// 操作码校验方法。如果为超级(userlevel==0)用户,则不做权限限制。
public function checkOperationAuth(code:String):Boolean
{
if (code == null || StringUtil2.TrimAllBlock(code).length == 0)
{
return false;
}
if (this.operatorVO != null && this.operatorVO.userlevel != null && this.operatorVO.userlevel == "0")
{
return true;
}
if (this.operCodes != null && this.operCodes.contains(code))
{
return true;
}
else
{
return false;
}
}
public function checkSingleUIComponetDisplay(comp:UIComponent):void
{
var compName:String=comp.name;
var flag:Boolean=checkOperationAuth(comp.name);
if (comp is Button)
{
comp.visible=flag;
comp.includeInLayout=flag;
}
else if (comp is DataGrid)
{
(comp as DataGrid).doubleClickEnabled=flag;
// (comp as DataGrid).selectable=flag;
}
else if (comp is Tree)
{
(comp as Tree).doubleClickEnabled=flag;
(comp as Tree).selectable=flag;
}
else if (comp is CarNumTextInput)
{
comp.visible=flag;
comp.includeInLayout=flag;
}
else if (comp is Label)
{
comp.visible=flag;
comp.includeInLayout=flag;
}
else if (comp is ComboBox)
{
comp.visible=flag;
comp.includeInLayout=flag;
}
}
// 批量处理控件的可见性
public function checkMuchUIComponetDisplay(components:Array):void
{
if (components != null && components.length > 0)
{
for each (var obj:UIComponent in components)
{
obj.visible=checkOperationAuth(obj.name);
obj.includeInLayout=checkOperationAuth(obj.name);
}
}
}
}
}
================================================================================================================================================================================????????????????==================================================
平台里AMFContext类的request ?????
ATMSSession?????
operatorVO.setIp(session.getRemoteAddr());
session是指请求里边的,用于存放数据的,(cookie)
数据库操作也有session是指与数据库建立的连接