java - 如何在java中的服务(DAO)类中获取客户端IP地址

标签 java

这是我的方法

public synchronized void updateCompanyByNameandUrl(String companyName, String companyUrl)
{

    PreparedStatement ps = null;
    PreparedStatement ps1 = null;
    Connection con = null;
    Connection globalconnection = null;
    String updateCompanyquery   = "update `anjo_company_master` set URL = ? where COMPANY_NAME=?";
    String updateGlobalCompQuery= "update `anjo_company_master_global` set URL = ?, USER_IP = ? where  COMPANY_NAME=?"; 
    try
    {
        ***InetAddress localhost = InetAddress.getLocalHost();
        String userIp = localhost.getHostAddress().trim();***
        con = SQLHikariConnectionFactory.getInstance().getConnection();

        ps = con.prepareStatement(updateCompanyquery);              

        ps.setString(1, companyUrl.trim());
        ps.setString(2, companyName.trim());
        ps.executeUpdate(); 

        //Updating companyUrl in Global Master also
        globalconnection = connFactory.getGlobalCompanyConnection();
        ps1 = globalconnection.prepareStatement(updateGlobalCompQuery);

        ps1.setString(1, companyUrl.trim());
        ps1.setString(2, userIp.trim());
        ps1.setString(3, companyName.trim());
        ps1.executeUpdate();    

    }
    catch(Exception e)
    {
        e.printStackTrace();
        LOG.info(e.getMessage(), e);
    }
    finally
    {
        try {
            if (con != null)    
                con.close();
            if (ps != null) 
                ps.close();
        }
        catch (Exception e2)
        {
            e2.printStackTrace();
        }
    }

}

这里是因为

InetAddress localhost = InetAddress.getLocalHost();
String userIp = localhost.getHostAddress().trim();

我没有获得 userIp,但获得了 serverIp

但是我得到的是 ServerIP 而不是 Client IP 谁能帮我吗?

最佳答案

请在调用 DAO 方法之前将 HttpServletRequest 对象设置到 DAO 类中。

Use the below code.


Class Test  extends HttpServlet {

               protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    System.out.println("Client IP   " + request.getHeader("X-Forwarded-For"));
    TestDAO dao = TestDAOImpl();
     dao.setHttpServletRequest(request);
     dao.xxxxx(xx,xx)\\call your method like this

    }

        }

    Class TestDAOImpl implements TestDAO { 

    private HttpServletRequest request;

    public void setHttpServletRequest(HttpServletRequest request) {
    this.request = request;
    }

    //write your method here.
    public <?> doSomthing(){

       String clientIP= this.request.getHeader("X-Forwarded-For");
       //d
}
    }

关于java - 如何在java中的服务(DAO)类中获取客户端IP地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59665377/

相关文章:

java - Hashmap<Object,Integer> 中的值增量,错误 "Integer cannot be converted to P(object)"Java

java - JAX-WS : [java] java. io.IOException:WSDL2Java 发射器超时(这通常意味着指定 URL 处的 WSDL 无法访问)

java - HyperJAXB:如何始终使用 @OneToOne 而不是 @ManyToOne

Java:扩展 ArrayList 有 add() 返回对象

java - 如何在父类(super class)中使用子类进行多态性?

java - 为什么 Java 9 和 10 不可见?

java - 获取随机值android firebase java

java - ArrayDeque 和 LinkedBlockingDeque

java - 多线程Swing程序中频繁调用setText()

java - 如何使用 Java 找到字符串中第一个 "element"的索引?