
当我们访问indexjsp/时,其实并不是我们浏览器真正访问到了服务器上的indexjsp 文件,而是先由代理服务器去访问indexjsp。
代理服务器再将访问到的结果返回给我们的浏览器,因为是代理服务器去访问indexjsp的。
所以indexjsp中通过 requestgetRemoteAddr()的方法获取的IP实际上是代理服务器的地址,并不是客户端的IP地址。
于是可得出获得客户端真实IP地址 的方法:
public class Myfilter implements Filter {
public void destroy() {
}
private >
private >
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException {
request = (>
response = (>
Systemoutprintln(requestgetRequestURI());
Systemoutprintln("===ff===="+requestgetQueryString());
if("1"equals(requestgetRequestURI()substring(("/"+requestgetContextPath())length()))){
requestgetRequestDispatcher("/myjsp")forward(request, response);
return;
}
arg2doFilter(request, arg1);
}
public void init(FilterConfig arg0) throws ServletException {
}
}
每个人有每个人的回答,先说下我对这道题的答案:
浏览器会访问DNS服务器将输入的域名对应的IP获取到
浏览通过>
在ASP中使用 RequestServerVariables("REMOTE_ADDR") 来取得客户端的IP地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的IP地址,而不是真正的客户端IP地址。
要想透过代理服务器取得客户端的真实IP地址,就要使用 RequestServerVariables(">
通过你dispacher拦截器的请求就可以进来 并且在请求分发的时候 如果没有配对的请求 就会报错的 你这种安全性设置其实没什么意义 可以把重要文件放在WEB-INF下 因为这是隐藏目录 所以按路径找不到的。如果你真想让url访问不了 方法如下
1如果你用的是springMVC的注解模式 在Controller里RequestMapping的method全变成post(因为url 是要用get方法的对吧)
2springMVC的声明模式 那你需要去spring的主配置文件去配置那个Conntroller 方法同上
这样的即便前面拦截器拦到了 到这里也就被挡住了
private String getIpAddr() {
String ipAddress = null;
//ipAddress = thisgetRequest()getRemoteAddr();
ipAddress = thisgetRequest()getHeader("x-forwarded-for");
if(ipAddress == null || ipAddresslength() == 0 || "unknown"equalsIgnoreCase(ipAddress)) {
ipAddress = thisgetRequest()getHeader("Proxy-Client-IP");
}
if(ipAddress == null || ipAddresslength() == 0 || "unknown"equalsIgnoreCase(ipAddress)) {
ipAddress = thisgetRequest()getHeader("WL-Proxy-Client-IP");
}
if(ipAddress == null || ipAddresslength() == 0 || "unknown"equalsIgnoreCase(ipAddress)) {
ipAddress = thisgetRequest()getRemoteAddr();
if(ipAddressequals("127001")){
//根据网卡取本机配置的IP
InetAddress inet=null;
try {
inet = InetAddressgetLocalHost();
} catch (UnknownHostException e) {
eprintStackTrace();
}
ipAddress= inetgetHostAddress();
}
}
//对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
if(ipAddress!=null && ipAddresslength()>15){ //""length() = 15
if(ipAddressindexOf(",")>0){
ipAddress = ipAddresssubstring(0,ipAddressindexOf(","));
}
}
return ipAddress;
}
我才用的一个项目,requestgetRemoteAddr();
不是很准确
如果你的系统是vista,和设置ipv4地址的方法一样。
如果是xp,打开一个dos窗口,照下面方法输入。
C:\>netsh
netsh>interface ipv6
netsh interface ipv6>add address "本地连接" fe80:a520:1314::1
/ 设定固定的IPv6地址,“本地连接”是指你的机上建立的某个连接的名称 /
netsh interface ipv6>add dns "本地连接" 2001:251:e101:0::2
/ 设定IPv6 DNS地址 /
以上就是关于java filter 如何中获取请求地址全部的内容,包括:java filter 如何中获取请求地址、rwquest里面能取到mac吗、ASP.NET 怎么获取客户端的外网IP地址,急~等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)