在javase环境中,jersey+grizzly2技术中 中如何获取客户端ip地址?在线等。。

在javase环境中,jersey+grizzly2技术中 中如何获取客户端ip地址?在线等。。

取决于你的应用服务器 grizzly2是否有前端web服务器, 如nginx, 有的话要处理代理头.

如nginx,可能有如下设置

  proxy_set_header    X-Forwarded-For     $remote_addr;


对于ipv4, 可以这样搞


    public static boolean isLocalOrUnknow(String ipaddress) {
    return ipaddress == null || ipaddress.length() == 0
            || "unknown".equalsIgnoreCase(ipaddress)
            || ipaddress.equals("127.0.0.1")
            || ipaddress.startsWith("192.168.")
            || ipaddress.startsWith("172.16.")
            || ipaddress.startsWith("172.17.")
            || ipaddress.startsWith("172.18.")
            || ipaddress.startsWith("172.19.")
            || ipaddress.startsWith("10.");
}

private static boolean isUnknow(String ipaddress) {
    return ipaddress == null || ipaddress.length() == 0
            || "unknown".equalsIgnoreCase(ipaddress)
            || ipaddress.equals("127.0.0.1");
}

public static String getClientIP(HttpServletRequest request) {
    String ipaddress = null;// request.getHeader("HTTP_X_FORWARDED_FOR");

    // Enumeration e = request.getHeaderNames();
    // while(e.hasMoreElements()){
    // Object s = e.nextElement();
    // System.out.println("HEADER: "+s+"="+request.getHeader(s.toString()));
    // }

    if (isLocalOrUnknow(ipaddress)) {
        ipaddress = request.getHeader("X-Real-IP");
        if (isLocalOrUnknow(ipaddress)) {
            ipaddress = request.getHeader("Proxy-Client-IP");
            if (isLocalOrUnknow(ipaddress)) {
                ipaddress = request.getHeader("WL-Proxy-Client-IP");
                if (isLocalOrUnknow(ipaddress)) {
                    ipaddress = request.getHeader("HTTP_CLIENT_IP");
                    if (isLocalOrUnknow(ipaddress)) {
                        ipaddress = request.getHeader("X-Forwarded-For");
                        if (isLocalOrUnknow(ipaddress)) {
                            ipaddress = request
                                    .getHeader("X-Originating-IP");
                            if (isLocalOrUnknow(ipaddress)) {
                                ipaddress = request
                                        .getHeader("HTTP_REMOTE_ADDR");
                            }

                            if (isUnknow(ipaddress)) {
                                ipaddress = request
                                        .getHeader("REMOTE_ADDR");

                            }
                        }

                    }

                }

            }

        }

    }

    if (isUnknow(ipaddress)) {
        ipaddress = request.getRemoteAddr();
    }
    return ipaddress;
}

@GET
@Path("/yourservice")
@Produces("text/xml")
public String activate(@Context HttpServletRequest requestContext,@Context SecurityContext context){

String ipAddressRequestCameFrom = requestContext.getRemoteAddr();

//Also if security is enabled
Principal principal = context.getUserPrincipal();
String userName = principal.getName();

}