`
hm2008
  • 浏览: 27043 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

在portlet获取客户端IP地址(转)

F# 
阅读更多
<p>方案一 通过反射直接获取HttpServletRequest
//Liferay 屏蔽了获取remoteHost 方法,但request对象是保留在私有域
java.lang.reflect.Field f =
request.getClass().getDeclaredField(&quot;_request &quot;);
f.setAccessible(true) ;//设置该变量可视
HttpServletRequest httpServletRequest = (HttpServletRequest)
f.get(request); //拿到Request
/*  以下处理用代理时的情况 */
String ip = httpServletRequest.getHeader(&quot;x-forwarded-for&quot;);
if(ip == null || ip.length() == 0 || &quot;unknown&quot;.equalsIgnoreCase(ip)) {
   ip = httpServletRequest.getHeader(&quot;Proxy-Client-IP&quot;);
}
if(ip == null || ip.length() == 0 || &quot;unknown&quot;.equalsIgnoreCase(ip)) {
   ip = httpServletRequest.getHeader(&quot;WL-Proxy-Client-IP&quot;);
}
if(ip == null || ip.length() == 0 || &quot;unknown&quot;.equalsIgnoreCase(ip)) {
   ip = httpServletRequest.getRemoteAddr();
}
System.out.println(&quot;ip:=&quot;+ip);
方案二 通过Liferay提供的工具
HttpServletRequest httpServletRequest =
com.liferay.portal.util.PortalUtil.getHttpServletRequest(renderRequest);
String ip = httpServletRequest.getHeader(&quot;x-forwarded-for&quot;);
if(ip == null || ip.length() == 0 || &quot;unknown&quot;.equalsIgnoreCase(ip)) {
   ip = httpServletRequest.getHeader(&quot;Proxy-Client-IP&quot;);
}
if(ip == null || ip.length() == 0 || &quot;unknown&quot;.equalsIgnoreCase(ip)) {
   ip = httpServletRequest.getHeader(&quot;WL-Proxy-Client-IP&quot;);
}
if(ip == null || ip.length() == 0 || &quot;unknown&quot;.equalsIgnoreCase(ip)) {
   ip = httpServletRequest.getRemoteAddr();
}
System.out.println(&quot;ip:=&quot;+ip);</p>
分享到:
评论

相关推荐

    portlet源码,portlet Filter

    Portlet是一种在Web应用程序中,特别是企业级门户平台中,用于呈现内容和功能的可重用组件。在Java世界中,portlet技术主要基于JSR 286(Portlet 2.0 API)标准,它定义了portlet如何与门户服务器交互。本篇文章将...

    portlet详细例子

    开发者会从中学习到如何定义portlet的配置元数据,编写portlet的Java代码(包括服务端的Portlet类和客户端的JSP页面),以及如何处理用户的请求和响应。HelloWorld Portlet可能会简单地在页面上显示一句“Hello, ...

    Portlet实例代码

    5. **Portlet上下文**:PortletContext对象提供了portlet与容器之间的通信接口,可以获取portlet的配置信息、发布资源等。 6. **Portlet Session**:类似于Servlet中的session,Portlet也有自己的session,用于在...

    Portlet规范之Pluto实现的运用

    1. 在`portlet.xml`文件中,在`&lt;portlet&gt;`标签同级位置声明`&lt;custom-portlet-mode&gt;`标签,并指定自定义的mode名称。 2. 在`&lt;portlet&gt;`标签内声明支持该mode。 3. 重写`GenericPortlet`中的`doDispatch`方法以处理...

    Portlet标准汉化手册

    本文将详细介绍Portlet标准及其在Portal中的应用,帮助读者理解这一技术的核心概念。 **1. 什么是Portal(门户)** Portal,中文常译为“门户网站”,是一种基于Web的系统,它提供了个性化设定、单一登录功能,并...

    在JetSpeed中开发portlet项目

    在JetSpeed中开发portlet项目是一项涉及Java Web技术的重要工作,主要基于JSR168(portlet规范1.0)标准。JetSpeed是一个开源的企业门户服务器,它支持portlet的开发和集成,提供了一个灵活且可扩展的框架来构建企业...

    portlet开发参考手册

    Portlet是一种可重用的Web组件,它们在门户环境中运行,允许用户自定义门户界面,展示各种信息和服务。这份手册深入探讨了portlet开发的关键概念、技术和最佳实践。 首先,portlet开发涉及到的主要技术有Java ...

    portlet入门介绍

    在Web开发领域,Portlet是一种特殊的组件,它被设计用来构建可复用、可配置的Web应用程序,通常在Portal环境下运行。Portlet技术为用户提供了一种集中访问多种服务和信息的方式,例如新闻、天气预报、邮件等。下面...

    jquery portlet

    在jQuery Portlet中,它充分展示了jQuery UI的强大功能,实现了MV(Model-View)架构,以提高用户体验和交互性。 ### 1. jQuery UI jQuery UI 是一个开源的JavaScript库,提供了丰富的用户界面插件,如拖放、对话框...

    IBM portlet api 和 中文教程

    在portlet的通信机制中,portlet与portal服务器之间通过portlet上下文(PortletContext)进行交互,获取portlet配置信息和共享资源。此外,portlet间可以通过公共渲染参数(Public Render Parameters)进行安全的...

    portlet之开发详解(中文)

    在如今的Web应用中,Portlet技术是一种用于创建动态Web内容组件的Java API,特别是在企业门户应用中十分常见。Portlet可以在 Portal 页面中作为一个独立的窗口区域显示内容,并且可以集成来自不同Web资源的信息。...

    Spring mvc portlet demo

    在这个demo中,我们将会深入探讨如何利用Spring 3.0 MVC架构来开发portlet应用。 **Spring MVC简介** Spring MVC是Spring框架的一部分,它提供了一个用于构建Web应用程序的模型-视图-控制器(MVC)架构。Spring MVC...

    Stringbeans3.5 加载外部portlet应用

    在IT行业中,Portlet是一种可重用的Web组件,它可以在门户环境中运行,提供特定的功能或服务。Stringbeans是一个流行的portlet容器,它允许开发者构建和管理portlet应用。本篇文章将详细探讨如何在Stringbeans 3.5...

    PortLet 入门小例子

    在portlet中,你可能需要创建一个模型类来处理数据,这可能包括从数据库或其他数据源获取数据,或者提供业务逻辑。模型通常与视图(JSP)和控制器(portlet类)分离,遵循MVC(Model-View-Controller)设计模式,...

    portlet 开发

    Portlet开发是构建企业级Web应用程序的一种方法,特别是在Java平台上,它被广泛应用于构建可重用、可组合的Web组件。Portlet技术允许开发者创建独立的功能模块,这些模块可以集成到更大的Web门户中,为用户提供个性...

    Portlet开发指南

    PortletRequests与PortletResponses**:PortletRequests包含了客户端发送给Portlet的所有请求信息,而PortletResponses则是Portlet用来向客户端发送响应的对象。理解请求和响应的处理流程是实现Portlet功能的关键。...

    Portlet规范介绍.rar

    Portlet规范定义了这些组件如何在门户环境中交互、渲染和管理用户界面。本篇文章将深入探讨Portlet的概念、功能、工作原理以及相关的技术标准。 Portlet是Java Portlet API的核心组成部分,它允许开发人员创建可...

    Portlet 2规范

    - **数据共享**:例如,用户在一个Portlet中输入的信息可以被其他Portlet获取和利用。 - **协同工作**:多个用户可以在不同的Portlet中协同编辑同一份文档。 ##### 2. 寿命周期管理 Portlet 2.0规范提供了更强大...

    Portlet

    Portlet是一种在Web应用程序中构建可重用、可组合组件的技术,尤其常见于企业级的portlet容器或门户系统中。Portlets是portlet容器中的微应用,它们能够集成到一个统一的用户界面中,允许用户个性化自己的工作环境,...

Global site tag (gtag.js) - Google Analytics