技术开发 频道

使用WebSphere Portal开发多区域设置网站

    开发和安装 Servlet 筛选器

    现在您需要在 Servlet 筛选器(我们将其称为 LocaleServletFilter)中实例化 LocaleRequestWrapper,并将其传递给链中的下一个筛选器。您将开发一个 Servlet 筛选器来执行业务逻辑和确定区域设置。此区域设置用于构造 LocaleRequestWrapper,如清单 4 中所示。

    清单 4. LocaleServletFilter 类

public class LocaleServletFilter extends javax.servlet.Filter { public void doFilter(javax.servlet.ServletRequest request, javax.servlet.ServletResponse response, javax.servlet.FilterChain chain) throws java.io.IOException, javax.servlet.ServletException { HttpServletRequest httpRequest = (HttpServletRequest)request; Locale locale = null; // perform the business logic here to determine the locale of // the request // wrap the request with our locale request wrapper LocaleRequestWrapper wrapper = new LocaleRequestWrapper(httpRequest, locale); // forward the wrapped request to the next filter in the chain if (chain != null) { chain.doFilter(wrapper, response); } } }

    您的业务逻辑还可能涉及到从用户的概要读取首选区域设置。您需要考虑这种可能性,因为您要将门户配置为在处理经过身份验证的请求时不会从用户概要检索首选区域设置。

    我们需要对匿名请求和经过身份验证的请求均使用此筛选器,且要在其他门户 Servlet 筛选器前调用。

    编辑门户的 web.xml。WebSphere Portal 是运行于 WebSphere Application Server 的 Web 容器中的 Web 应用程序。web.xml 文件位于以下目录中:
<App Server Root>/cells/<cell name>/applications/wps.ear/deployments/wps/wps.war/WEB-INF
    将以下 <filter> 和 <filter-mapping> 元素添加到 web.xml 相应的部分中。请确保将该 <filter-mapping> 添加到其他 <filter-mapping> 元素之前,以便先于任何其他门户 Servlet 筛选器调用此筛选器。

    清单 5. LocaleServletFilter 的 <filter> 和 <filter-mapping> 元素

<filter> <filter-name>Locale Filter</filter-name> <filter-class>com.foo.bar.LocaleServletFilter</filter-class> </filter> <filter-mapping> <filter-name>Locale Filter</filter-name> <url-pattern>/myportal/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>Locale Filter</filter-name> <url-pattern>/portal/*</url-pattern> </filter-mapping>

    将包含筛选器和请求包装的 jar 文件放入位于类路径中的目录,如 <Portal root>/shared/app 目录。

    配置门户

    最后,您需要对门户进行配置,以使其不会从用户概要检索首选区域设置。

    编辑位于以下目录中的 wmmLDAPServerAttributes.xml 文件:<Portal root>/wmm/
    删除 preferredLanguage 的整个 <attributeMap> 元素。

    清单 6. 删除以下 <attributeMap> 元素

<attributeMap wmmAttributeName="preferredLanguage" pluginAttributeName="preferredLanguage" applicableMemberTypes="Person" dataType="String" valueLength="128" multiValued="false"/>

    进行此更改将强制 WebSphere Portal 使用在请求 Header 中设置的区域设置作为请求的区域设置。

    重要:在集群环境中,您需要修改部署管理器的 wmmLDAPServerAttributes.xml 副本(通常位于 <Deployment Manager root>/config/wmm 目录中),然后与所有集群成员同步这些更改。

    结束语

    在本文中,您了解了 WebSphere Portal 用于确定请求的区域设置的算法。然后,您了解了如何使用 Servlet 筛选器来基于业务规则确定区域设置。您使用了请求包装来在 Accept-Language 请求 Header 中设置此区域设置。最后,您强制 WebSphere Portal 对经过身份验证的请求使用请求 Header 中的区域设置。

0
相关文章