001    /**
002     * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portlet.relatedassets.filter;
016    
017    import com.liferay.portal.kernel.servlet.DynamicServletRequest;
018    import com.liferay.portal.theme.ThemeDisplay;
019    import com.liferay.portal.util.PortalUtil;
020    import com.liferay.portal.util.WebKeys;
021    import com.liferay.portlet.RenderParametersPool;
022    
023    import java.io.IOException;
024    
025    import java.util.Map;
026    
027    import javax.portlet.PortletException;
028    import javax.portlet.RenderRequest;
029    import javax.portlet.RenderResponse;
030    import javax.portlet.filter.FilterChain;
031    import javax.portlet.filter.FilterConfig;
032    import javax.portlet.filter.RenderFilter;
033    
034    import javax.servlet.http.HttpServletRequest;
035    import javax.servlet.http.HttpServletRequestWrapper;
036    
037    /**
038     * @author Minhchau Dang
039     * @author Preston Crary
040     */
041    public class RelatedAssetsRenderParametersPortletFilter
042            implements RenderFilter {
043    
044            @Override
045            public void destroy() {
046            }
047    
048            @Override
049            public void doFilter(
050                            RenderRequest renderRequest, RenderResponse renderResponse,
051                            FilterChain filterChain)
052                    throws IOException, PortletException {
053    
054                    HttpServletRequest request = PortalUtil.getHttpServletRequest(
055                            renderRequest);
056    
057                    if (request.getAttribute(WebKeys.LAYOUT_ASSET_ENTRY) == null) {
058                            clearDynamicServletRequestParameters(request);
059    
060                            clearRenderRequestParameters(renderRequest, request);
061                    }
062    
063                    filterChain.doFilter(renderRequest, renderResponse);
064            }
065    
066            @Override
067            public void init(FilterConfig filterConfig) {
068            }
069    
070            protected void clearDynamicServletRequestParameters(
071                    HttpServletRequest request) {
072    
073                    DynamicServletRequest dynamicServletRequest = null;
074    
075                    while (request instanceof HttpServletRequestWrapper) {
076                            if (request instanceof DynamicServletRequest) {
077                                    dynamicServletRequest = (DynamicServletRequest)request;
078    
079                                    break;
080                            }
081    
082                            HttpServletRequestWrapper httpServletRequestWrapper =
083                                    (HttpServletRequestWrapper)request;
084    
085                            request =
086                                    (HttpServletRequest)httpServletRequestWrapper.getRequest();
087                    }
088    
089                    if (dynamicServletRequest != null) {
090                            Map<String, String[]> dynamicParameterMap =
091                                    dynamicServletRequest.getDynamicParameterMap();
092    
093                            dynamicParameterMap.clear();
094                    }
095            }
096    
097            protected void clearRenderRequestParameters(
098                    RenderRequest renderRequest, HttpServletRequest request) {
099    
100                    ThemeDisplay themeDisplay = (ThemeDisplay)renderRequest.getAttribute(
101                            WebKeys.THEME_DISPLAY);
102    
103                    String portletId = PortalUtil.getPortletId(renderRequest);
104    
105                    RenderParametersPool.clear(request, themeDisplay.getPlid(), portletId);
106            }
107    
108    }