java filter 如何中获取请求地址

java filter 如何中获取请求地址,第1张

当我们访问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地址,急~等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9268461.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-26
下一篇2023-04-26

发表评论

登录后才能评论

评论列表(0条)

    保存