java filter 如何中获取请求地址?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java filter 如何中获取请求地址?相关的知识,希望对你有一定的参考价值。

当我们访问index.jsp/时,其实并不是我们浏览器真正访问到了服务器上的index.jsp 文件,而是先由代理服务器去访问index.jsp。

代理服务器再将访问到的结果返回给我们的浏览器,因为是代理服务器去访问index.jsp的。

所以index.jsp中通过 request.getRemoteAddr()的方法获取的IP实际上是代理服务器的地址,并不是客户端的IP地址。  

于是可得出获得客户端真实IP地址 的方法:

public class Myfilter implements Filter  

public void destroy()  

 

private HttpServletRequest request; 

private HttpServletResponse response; 

public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException  

request = (HttpServletRequest) arg0; 

response = (HttpServletResponse) arg1; 

System.out.println(request.getRequestURI()); 

System.out.println("===ff===="+request.getQueryString()); 

if("1".equals(request.getRequestURI().substring(("/"+request.getContextPath()).length()))) 

request.getRequestDispatcher("/my.jsp").forward(request, response); 

return; 

 

arg2.doFilter(request, arg1); 

 

public void init(FilterConfig arg0) throws ServletException  

 

参考技术A public class MyFilter implements Filter

public void doFilter(ServletRequest req,ServletResponse res,FilterChain chain)
HttpServletRequest request=(HttpServletRequest)req;

String uri=request.getRequestURI(); //uri就是获取到的连接地址!




//谢谢采纳本回答被提问者和网友采纳
参考技术B 这个要看是哪个Filter 。。。。。。。

使用filter获取http请求的出参以及入参

首先 我们的目的是做一个拦截器 能够对http请求做profiler,能够记录本次的调用情况,这里说下如何从http请求中获取到出参的问题。

 

方案一:参照http://blog.csdn.net/wuhenzhangxing/article/details/53079458

 该方案中,使用了HttpServletResponseWrapper,也就是HttpServletResponse的装饰器,相当一是一个代理,当业务中对response做写入的时候,会被装饰器拦截下来做个处理,比如输出到另外的一个ByteArrayOutputSteam中。然后我们就可以获取到指定的值了。

这种方案,使用的是标准的servlet api,比较标准 但是感觉还是有个小麻烦。

 

方案二:既然反射的功能那么强大  那么我们能不能用反射来做呢?

上代码:

    /*获取http出参*/
    private String getOutputSteamContentForTomcat7(ServletResponse response) {
        try {
            OutputStream outputStream = response.getOutputStream();
            Object contentHolder = ReflectUtil.getFiledValue(outputStream, "ob");
            //获取到buffer 然后从buffer中获取到返回值
            Object result = ReflectUtil.getFiledValue(contentHolder, "outputChunk");
            String resultString = result == null ? StringUtils.EMPTY : result.toString();
            if (StringUtils.startsWith(resultString, "<html>")) {
                //含有html文本
                return "HTML-CONTENT";
            }
            return resultString;
        } catch (Exception e) {
            LoggerUtils.error(logger, e, "获取WEB返回内容异常");
            return StringUtils.EMPTY;
        }

该方法中 使用反射来获取,但是坏处也非常明显,由于不是使用的标准的API接口 会导致tomcat版本不同 内部的类结构不同而导致获取不到 但是实现起来比较简单

以上是关于java filter 如何中获取请求地址?的主要内容,如果未能解决你的问题,请参考以下文章

java 获取客户端ip地址

如何在servlet java中获取客户端公共IP地址[重复]

java request 如何取到发送请求的地址是啥

Java获取请求客户端的真实IP地址

如何从请求上下文nestjs中获取IP地址?

如何从 HTTP 请求中获取 MAC 地址?