<p>方案一 通过反射直接获取HttpServletRequest
//Liferay 屏蔽了获取remoteHost 方法,但request对象是保留在私有域
java.lang.reflect.Field f =
request.getClass().getDeclaredField("_request ");
f.setAccessible(true) ;//设置该变量可视
HttpServletRequest httpServletRequest = (HttpServletRequest)
f.get(request); //拿到Request
/* 以下处理用代理时的情况 */
String ip = httpServletRequest.getHeader("x-forwarded-for");
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = httpServletRequest.getHeader("Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = httpServletRequest.getHeader("WL-Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = httpServletRequest.getRemoteAddr();
}
System.out.println("ip:="+ip);
方案二 通过Liferay提供的工具
HttpServletRequest httpServletRequest =
com.liferay.portal.util.PortalUtil.getHttpServletRequest(renderRequest);
String ip = httpServletRequest.getHeader("x-forwarded-for");
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = httpServletRequest.getHeader("Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = httpServletRequest.getHeader("WL-Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = httpServletRequest.getRemoteAddr();
}
System.out.println("ip:="+ip);</p>
分享到:
相关推荐
Portlet是一种在Web应用程序中,特别是企业级门户平台中,用于呈现内容和功能的可重用组件。在Java世界中,portlet技术主要基于JSR 286(Portlet 2.0 API)标准,它定义了portlet如何与门户服务器交互。本篇文章将...
开发者会从中学习到如何定义portlet的配置元数据,编写portlet的Java代码(包括服务端的Portlet类和客户端的JSP页面),以及如何处理用户的请求和响应。HelloWorld Portlet可能会简单地在页面上显示一句“Hello, ...
5. **Portlet上下文**:PortletContext对象提供了portlet与容器之间的通信接口,可以获取portlet的配置信息、发布资源等。 6. **Portlet Session**:类似于Servlet中的session,Portlet也有自己的session,用于在...
1. 在`portlet.xml`文件中,在`<portlet>`标签同级位置声明`<custom-portlet-mode>`标签,并指定自定义的mode名称。 2. 在`<portlet>`标签内声明支持该mode。 3. 重写`GenericPortlet`中的`doDispatch`方法以处理...
本文将详细介绍Portlet标准及其在Portal中的应用,帮助读者理解这一技术的核心概念。 **1. 什么是Portal(门户)** Portal,中文常译为“门户网站”,是一种基于Web的系统,它提供了个性化设定、单一登录功能,并...
在JetSpeed中开发portlet项目是一项涉及Java Web技术的重要工作,主要基于JSR168(portlet规范1.0)标准。JetSpeed是一个开源的企业门户服务器,它支持portlet的开发和集成,提供了一个灵活且可扩展的框架来构建企业...
Portlet是一种可重用的Web组件,它们在门户环境中运行,允许用户自定义门户界面,展示各种信息和服务。这份手册深入探讨了portlet开发的关键概念、技术和最佳实践。 首先,portlet开发涉及到的主要技术有Java ...
在Web开发领域,Portlet是一种特殊的组件,它被设计用来构建可复用、可配置的Web应用程序,通常在Portal环境下运行。Portlet技术为用户提供了一种集中访问多种服务和信息的方式,例如新闻、天气预报、邮件等。下面...
在jQuery Portlet中,它充分展示了jQuery UI的强大功能,实现了MV(Model-View)架构,以提高用户体验和交互性。 ### 1. jQuery UI jQuery UI 是一个开源的JavaScript库,提供了丰富的用户界面插件,如拖放、对话框...
在portlet的通信机制中,portlet与portal服务器之间通过portlet上下文(PortletContext)进行交互,获取portlet配置信息和共享资源。此外,portlet间可以通过公共渲染参数(Public Render Parameters)进行安全的...
在如今的Web应用中,Portlet技术是一种用于创建动态Web内容组件的Java API,特别是在企业门户应用中十分常见。Portlet可以在 Portal 页面中作为一个独立的窗口区域显示内容,并且可以集成来自不同Web资源的信息。...
在这个demo中,我们将会深入探讨如何利用Spring 3.0 MVC架构来开发portlet应用。 **Spring MVC简介** Spring MVC是Spring框架的一部分,它提供了一个用于构建Web应用程序的模型-视图-控制器(MVC)架构。Spring MVC...
在IT行业中,Portlet是一种可重用的Web组件,它可以在门户环境中运行,提供特定的功能或服务。Stringbeans是一个流行的portlet容器,它允许开发者构建和管理portlet应用。本篇文章将详细探讨如何在Stringbeans 3.5...
在portlet中,你可能需要创建一个模型类来处理数据,这可能包括从数据库或其他数据源获取数据,或者提供业务逻辑。模型通常与视图(JSP)和控制器(portlet类)分离,遵循MVC(Model-View-Controller)设计模式,...
Portlet开发是构建企业级Web应用程序的一种方法,特别是在Java平台上,它被广泛应用于构建可重用、可组合的Web组件。Portlet技术允许开发者创建独立的功能模块,这些模块可以集成到更大的Web门户中,为用户提供个性...
PortletRequests与PortletResponses**:PortletRequests包含了客户端发送给Portlet的所有请求信息,而PortletResponses则是Portlet用来向客户端发送响应的对象。理解请求和响应的处理流程是实现Portlet功能的关键。...
Portlet规范定义了这些组件如何在门户环境中交互、渲染和管理用户界面。本篇文章将深入探讨Portlet的概念、功能、工作原理以及相关的技术标准。 Portlet是Java Portlet API的核心组成部分,它允许开发人员创建可...
- **数据共享**:例如,用户在一个Portlet中输入的信息可以被其他Portlet获取和利用。 - **协同工作**:多个用户可以在不同的Portlet中协同编辑同一份文档。 ##### 2. 寿命周期管理 Portlet 2.0规范提供了更强大...
Portlet是一种在Web应用程序中构建可重用、可组合组件的技术,尤其常见于企业级的portlet容器或门户系统中。Portlets是portlet容器中的微应用,它们能够集成到一个统一的用户界面中,允许用户个性化自己的工作环境,...