2 * Copyright (c) 2000-2011 Liferay, Inc. All rights reserved.
4 * This library is free software; you can redistribute it and/or modify it under
5 * the terms of the GNU Lesser General Public License as published by the Free
6 * Software Foundation; either version 2.1 of the License, or (at your option)
9 * This library is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
15 package com.liferay.portal.struts;
17 import java.io.IOException;
18 import java.util.Date;
19 import java.util.HashMap;
20 import java.util.HashSet;
21 import java.util.Iterator;
22 import java.util.List;
24 import java.util.Map.Entry;
27 import javax.portlet.PortletConfig;
28 import javax.portlet.PortletContext;
29 import javax.portlet.PortletMode;
30 import javax.portlet.PortletPreferences;
31 import javax.portlet.PortletRequest;
32 import javax.portlet.WindowState;
33 import javax.servlet.ServletContext;
34 import javax.servlet.ServletException;
35 import javax.servlet.http.HttpServletRequest;
36 import javax.servlet.http.HttpServletResponse;
37 import javax.servlet.http.HttpSession;
38 import javax.servlet.jsp.PageContext;
40 import org.apache.struts.action.ActionMapping;
41 import org.apache.struts.config.ForwardConfig;
42 import org.apache.struts.tiles.TilesRequestProcessor;
44 import com.liferay.portal.LayoutPermissionException;
45 import com.liferay.portal.PortletActiveException;
46 import com.liferay.portal.UserActiveException;
47 import com.liferay.portal.kernel.exception.SystemException;
48 import com.liferay.portal.kernel.log.Log;
49 import com.liferay.portal.kernel.log.LogFactoryUtil;
50 import com.liferay.portal.kernel.portlet.FriendlyURLMapper;
51 import com.liferay.portal.kernel.servlet.HttpMethods;
52 import com.liferay.portal.kernel.servlet.SessionErrors;
53 import com.liferay.portal.kernel.struts.LastPath;
54 import com.liferay.portal.kernel.util.CharPool;
55 import com.liferay.portal.kernel.util.GetterUtil;
56 import com.liferay.portal.kernel.util.HttpUtil;
57 import com.liferay.portal.kernel.util.JavaConstants;
58 import com.liferay.portal.kernel.util.ParamUtil;
59 import com.liferay.portal.kernel.util.PropsKeys;
60 import com.liferay.portal.kernel.util.StringBundler;
61 import com.liferay.portal.kernel.util.StringPool;
62 import com.liferay.portal.kernel.util.Validator;
63 import com.liferay.portal.liveusers.LiveUsers;
64 import com.liferay.portal.model.Layout;
65 import com.liferay.portal.model.LayoutConstants;
66 import com.liferay.portal.model.LayoutTypePortlet;
67 import com.liferay.portal.model.Portlet;
68 import com.liferay.portal.model.PortletPreferencesIds;
69 import com.liferay.portal.model.User;
70 import com.liferay.portal.model.UserTracker;
71 import com.liferay.portal.model.UserTrackerPath;
72 import com.liferay.portal.security.auth.PrincipalException;
73 import com.liferay.portal.security.permission.ActionKeys;
74 import com.liferay.portal.security.permission.PermissionChecker;
75 import com.liferay.portal.service.LayoutLocalServiceUtil;
76 import com.liferay.portal.service.PortletLocalServiceUtil;
77 import com.liferay.portal.service.PortletPreferencesLocalServiceUtil;
78 import com.liferay.portal.service.UserLocalServiceUtil;
79 import com.liferay.portal.service.permission.PortletPermissionUtil;
80 import com.liferay.portal.service.persistence.UserTrackerPathUtil;
81 import com.liferay.portal.theme.ThemeDisplay;
82 import com.liferay.portal.util.PortalUtil;
83 import com.liferay.portal.util.PrefsPropsUtil;
84 import com.liferay.portal.util.PropsUtil;
85 import com.liferay.portal.util.PropsValues;
86 import com.liferay.portal.util.WebKeys;
87 import com.liferay.portlet.InvokerPortlet;
88 import com.liferay.portlet.PortletConfigFactoryUtil;
89 import com.liferay.portlet.PortletInstanceFactoryUtil;
90 import com.liferay.portlet.PortletPreferencesFactoryUtil;
91 import com.liferay.portlet.PortletURLImpl;
92 import com.liferay.portlet.RenderRequestFactory;
93 import com.liferay.portlet.RenderRequestImpl;
94 import com.liferay.portlet.RenderResponseFactory;
95 import com.liferay.portlet.RenderResponseImpl;
96 import com.pentila.entSavoie.utils.ENTMainUtilsLocalServiceUtil;
99 * @author Brian Wing Shun Chan
100 * @author Jorge Ferrer
101 * @author Wesley Gong
103 public class PortalRequestProcessor extends TilesRequestProcessor {
105 public PortalRequestProcessor() {
107 // auth.forward.last.path.
109 _lastPaths = new HashSet<String>();
111 _lastPaths.add(_PATH_PORTAL_LAYOUT);
113 addPaths(_lastPaths, PropsKeys.AUTH_FORWARD_LAST_PATHS);
117 _publicPaths = new HashSet<String>();
119 _publicPaths.add(_PATH_C);
120 _publicPaths.add(_PATH_PORTAL_FLASH);
121 _publicPaths.add(_PATH_PORTAL_J_LOGIN);
122 _publicPaths.add(_PATH_PORTAL_LAYOUT);
123 _publicPaths.add(_PATH_PORTAL_LOGIN);
124 _publicPaths.add(_PATH_PORTAL_RENDER_PORTLET);
125 _publicPaths.add(_PATH_PORTAL_TCK);
126 _publicPaths.add(_PATH_PORTAL_UPDATE_PASSWORD);
128 addPaths(_publicPaths, PropsKeys.AUTH_PUBLIC_PATHS);
130 _trackerIgnorePaths = new HashSet<String>();
132 addPaths(_trackerIgnorePaths, PropsKeys.SESSION_TRACKER_IGNORE_PATHS);
136 HttpServletRequest request, HttpServletResponse response)
137 throws IOException, ServletException {
139 String path = super.processPath(request, response);
141 ActionMapping mapping = (ActionMapping)moduleConfig.findActionConfig(
144 if (mapping == null) {
145 String lastPath = getLastPath(request);
147 if (_log.isDebugEnabled()) {
148 _log.debug("Last path " + lastPath);
151 response.sendRedirect(lastPath);
156 super.process(request, response);
159 if (isPortletPath(path)) {
163 catch (Exception e) {
168 protected void addPaths(Set<String> paths, String propsKey) {
169 String[] pathsArray = PropsUtil.getArray(propsKey);
171 for (String path : pathsArray) {
176 protected void callParentDoForward(
177 String uri, HttpServletRequest request,
178 HttpServletResponse response)
179 throws IOException, ServletException {
181 super.doForward(uri, request, response);
184 protected HttpServletRequest callParentProcessMultipart(
185 HttpServletRequest request) {
187 return super.processMultipart(request);
190 protected String callParentProcessPath(
191 HttpServletRequest request, HttpServletResponse response)
194 return super.processPath(request, response);
197 protected boolean callParentProcessRoles(
198 HttpServletRequest request, HttpServletResponse response,
199 ActionMapping mapping)
200 throws IOException, ServletException {
202 return super.processRoles(request, response, mapping);
205 protected void cleanUp(HttpServletRequest request) throws Exception {
207 // Clean up portlet objects that may have been created by defineObjects
208 // for portlets that are called directly from a Struts path
210 RenderRequestImpl renderRequestImpl =
211 (RenderRequestImpl)request.getAttribute(
212 JavaConstants.JAVAX_PORTLET_REQUEST);
214 if (renderRequestImpl != null) {
215 renderRequestImpl.cleanUp();
219 protected void defineObjects(
220 HttpServletRequest request, HttpServletResponse response,
224 String portletId = portlet.getPortletId();
226 ServletContext servletContext = (ServletContext)request.getAttribute(
229 InvokerPortlet invokerPortlet = PortletInstanceFactoryUtil.create(
230 portlet, servletContext);
232 PortletPreferencesIds portletPreferencesIds =
233 PortletPreferencesFactoryUtil.getPortletPreferencesIds(
236 PortletPreferences portletPreferences =
237 PortletPreferencesLocalServiceUtil.getPreferences(
238 portletPreferencesIds);
240 PortletConfig portletConfig = PortletConfigFactoryUtil.create(
241 portlet, servletContext);
242 PortletContext portletContext = portletConfig.getPortletContext();
244 RenderRequestImpl renderRequestImpl = RenderRequestFactory.create(
245 request, portlet, invokerPortlet, portletContext,
246 WindowState.MAXIMIZED, PortletMode.VIEW, portletPreferences);
248 RenderResponseImpl renderResponseImpl = RenderResponseFactory.create(
249 renderRequestImpl, response, portletId, portlet.getCompanyId());
251 renderRequestImpl.defineObjects(portletConfig, renderResponseImpl);
253 request.setAttribute(WebKeys.PORTLET_STRUTS_EXECUTE, Boolean.TRUE);
256 protected void doForward(
257 String uri, HttpServletRequest request,
258 HttpServletResponse response)
259 throws ServletException {
261 StrutsUtil.forward(uri, getServletContext(), request, response);
264 protected void doInclude(
265 String uri, HttpServletRequest request,
266 HttpServletResponse response)
267 throws ServletException {
269 StrutsUtil.include(uri, getServletContext(), request, response);
272 protected String getFriendlyTrackerPath(
273 String path, ThemeDisplay themeDisplay, HttpServletRequest request)
276 if (!path.equals(_PATH_PORTAL_LAYOUT)) {
280 long plid = ParamUtil.getLong(request, "p_l_id");
286 Layout layout = LayoutLocalServiceUtil.getLayout(plid);
288 String layoutFriendlyURL = PortalUtil.getLayoutFriendlyURL(
289 layout, themeDisplay);
291 String portletId = ParamUtil.getString(request, "p_p_id");
293 if (Validator.isNull(portletId)) {
294 return layoutFriendlyURL;
297 long companyId = PortalUtil.getCompanyId(request);
299 Portlet portlet = PortletLocalServiceUtil.getPortletById(
300 companyId, portletId);
302 if (portlet == null) {
303 String strutsPath = path.substring(
304 1, path.lastIndexOf(CharPool.SLASH));
306 portlet = PortletLocalServiceUtil.getPortletByStrutsPath(
307 companyId, strutsPath);
310 if ((portlet == null) || !portlet.isActive()) {
311 return layoutFriendlyURL.concat(StringPool.QUESTION).concat(
312 request.getQueryString());
315 String namespace = PortalUtil.getPortletNamespace(portletId);
317 FriendlyURLMapper friendlyURLMapper =
318 portlet.getFriendlyURLMapperInstance();
320 if (friendlyURLMapper == null) {
321 return layoutFriendlyURL.concat(StringPool.QUESTION).concat(
322 request.getQueryString());
325 PortletURLImpl portletURL = new PortletURLImpl(
326 request, portletId, plid, PortletRequest.RENDER_PHASE);
328 Iterator<Map.Entry<String, String[]>> itr =
329 request.getParameterMap().entrySet().iterator();
331 while (itr.hasNext()) {
332 Entry<String, String[]> entry = itr.next();
334 String key = entry.getKey();
336 if (key.startsWith(namespace)) {
337 key = key.substring(namespace.length());
339 portletURL.setParameter(key, entry.getValue());
343 String portletFriendlyURL = friendlyURLMapper.buildPath(portletURL);
345 if (portletFriendlyURL != null) {
346 return layoutFriendlyURL.concat(portletFriendlyURL);
349 return layoutFriendlyURL.concat(StringPool.QUESTION).concat(
350 request.getQueryString());
354 protected String getLastPath(HttpServletRequest request) {
355 HttpSession session = request.getSession();
357 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
358 WebKeys.THEME_DISPLAY);
360 Boolean httpsInitial = (Boolean)session.getAttribute(
361 WebKeys.HTTPS_INITIAL);
363 String portalURL = null;
365 if ((PropsValues.COMPANY_SECURITY_AUTH_REQUIRES_HTTPS) &&
366 (!PropsValues.SESSION_ENABLE_PHISHING_PROTECTION) &&
367 (httpsInitial != null) && (!httpsInitial.booleanValue())) {
369 portalURL = PortalUtil.getPortalURL(request, false);
372 portalURL = PortalUtil.getPortalURL(request);
375 StringBundler sb = new StringBundler();
377 sb.append(portalURL);
378 sb.append(themeDisplay.getPathMain());
379 sb.append(_PATH_PORTAL_LAYOUT);
381 if (!PropsValues.AUTH_FORWARD_BY_LAST_PATH) {
382 if (request.getRemoteUser() != null) {
384 // If we do not forward by last path and the user is logged in,
385 // forward to the user's default layout to prevent a lagging
388 sb.append(StringPool.QUESTION);
390 sb.append(StringPool.EQUAL);
391 sb.append(LayoutConstants.DEFAULT_PLID);
394 return sb.toString();
397 LastPath lastPath = (LastPath)session.getAttribute(WebKeys.LAST_PATH);
399 if (lastPath == null) {
400 return sb.toString();
403 Map<String, String[]> parameterMap = lastPath.getParameterMap();
405 // Only test for existing mappings for last paths that were set when the
406 // user accessed a layout directly instead of through its friendly URL
408 if (lastPath.getContextPath().equals(themeDisplay.getPathMain())) {
409 ActionMapping mapping =
410 (ActionMapping)moduleConfig.findActionConfig(
413 if ((mapping == null) || (parameterMap == null)) {
414 return sb.toString();
418 StringBundler lastPathSB = new StringBundler(4);
420 lastPathSB.append(portalURL);
421 lastPathSB.append(lastPath.getContextPath());
422 lastPathSB.append(lastPath.getPath());
423 lastPathSB.append(HttpUtil.parameterMapToString(parameterMap));
425 return lastPathSB.toString();
428 protected boolean isPortletPath(String path) {
429 if ((path != null) &&
430 (!path.equals(_PATH_C)) &&
431 (!path.startsWith(_PATH_COMMON)) &&
432 (path.indexOf(_PATH_J_SECURITY_CHECK) == -1) &&
433 (!path.startsWith(_PATH_PORTAL))) {
442 protected boolean isPublicPath(String path) {
443 if ((path != null) &&
444 (_publicPaths.contains(path)) ||
445 (path.startsWith(_PATH_COMMON))) {
454 protected ActionMapping processMapping(
455 HttpServletRequest request, HttpServletResponse response,
463 ActionMapping mapping = super.processMapping(request, response, path);
465 if (mapping == null) {
466 String msg = getInternal().getMessage("processInvalid");
468 _log.error("User ID " + request.getRemoteUser());
469 _log.error("Current URL " + PortalUtil.getCurrentURL(request));
470 _log.error("Referer " + request.getHeader("Referer"));
471 _log.error("Remote address " + request.getRemoteAddr());
473 // _log.error(msg + " " + path);
479 protected HttpServletRequest processMultipart(HttpServletRequest request) {
481 // Disable Struts from automatically wrapping a multipart request
486 protected String processPath(
487 HttpServletRequest request, HttpServletResponse response)
490 String path = GetterUtil.getString(
491 super.processPath(request, response));
493 HttpSession session = request.getSession();
495 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
496 WebKeys.THEME_DISPLAY);
500 UserTracker userTracker = LiveUsers.getUserTracker(
501 themeDisplay.getCompanyId(), session.getId());
503 if ((userTracker != null) && (!path.equals(_PATH_C)) &&
504 (path.indexOf(_PATH_J_SECURITY_CHECK) == -1) &&
505 (path.indexOf(_PATH_PORTAL_PROTECTED) == -1) &&
506 (!_trackerIgnorePaths.contains(path))) {
508 String fullPath = null;
511 if (PropsValues.SESSION_TRACKER_FRIENDLY_PATHS_ENABLED) {
512 fullPath = getFriendlyTrackerPath(
513 path, themeDisplay, request);
516 catch (Exception e) {
520 String queryString = request.getQueryString();
522 if (Validator.isNull(fullPath) &&
523 Validator.isNotNull(queryString)) {
525 fullPath = path.concat(StringPool.QUESTION).concat(queryString);
531 UserTrackerPath userTrackerPath = UserTrackerPathUtil.create(0);
533 userTrackerPath.setUserTrackerId(userTracker.getUserTrackerId());
534 userTrackerPath.setPath(fullPath);
535 userTrackerPath.setPathDate(new Date());
537 userTracker.addPath(userTrackerPath);
540 String remoteUser = request.getRemoteUser();
545 user = PortalUtil.getUser(request);
547 catch (Exception e) {
552 if (_lastPaths.contains(path) && !_trackerIgnorePaths.contains(path)) {
553 boolean saveLastPath = ParamUtil.getBoolean(
554 request, "saveLastPath", true);
556 if (themeDisplay.isLifecycleResource() ||
557 themeDisplay.isStateExclusive() ||
558 themeDisplay.isStatePopUp() ||
559 !request.getMethod().equalsIgnoreCase(HttpMethods.GET)) {
561 saveLastPath = false;
568 // Was a last path set by another servlet that dispatched to
569 // the MainServlet? If so, use that last path instead.
571 LastPath lastPath = (LastPath)request.getAttribute(
574 if (lastPath == null) {
575 lastPath = new LastPath(
576 themeDisplay.getPathMain(), path,
577 request.getParameterMap());
580 session.setAttribute(WebKeys.LAST_PATH, lastPath);
584 // Authenticated users can always log out
586 if (((remoteUser != null) || (user != null)) &&
587 (path.equals(_PATH_PORTAL_LOGOUT))) {
592 // Authenticated users can always extend or confirm their session
594 if (((remoteUser != null) || (user != null)) &&
595 (path.equals(_PATH_PORTAL_EXPIRE_SESSION) ||
596 path.equals(_PATH_PORTAL_EXTEND_SESSION))) {
601 // Authenticated users can always agree to terms of use
603 if (((remoteUser != null) || (user != null)) &&
604 (path.equals(_PATH_PORTAL_UPDATE_TERMS_OF_USE))) {
609 // Authenticated users must still exist in the system
611 if ((remoteUser != null) && (user == null)) {
612 return _PATH_PORTAL_LOGOUT;
615 // Authenticated users must be active
617 if ((user != null) && !user.isActive()) {
618 SessionErrors.add(request, UserActiveException.class.getName());
620 return _PATH_PORTAL_ERROR;
623 if (!path.equals(_PATH_PORTAL_JSON_SERVICE) &&
624 !path.equals(_PATH_PORTAL_RENDER_PORTLET) &&
625 !ParamUtil.getBoolean(request, "wsrp")) {
627 // Authenticated users should agree to Terms of Use
629 if ((user != null) && !user.isAgreedToTermsOfUse()) {
630 boolean termsOfUseRequired = false;
633 termsOfUseRequired = PrefsPropsUtil.getBoolean(
634 user.getCompanyId(), PropsKeys.TERMS_OF_USE_REQUIRED);
636 catch (SystemException se) {
637 termsOfUseRequired = PropsValues.TERMS_OF_USE_REQUIRED;
640 if (termsOfUseRequired) {
642 if (ENTMainUtilsLocalServiceUtil.isSchemaSupann(user.getCompanyId())){
643 Map<String, String[]> params = new HashMap<String, String[]>();
644 String defaultPageLanding = ENTMainUtilsLocalServiceUtil.getLoginDefaultPageLanding(user.getCompanyId());
645 LastPath lastPath = new LastPath(StringPool.BLANK, "/user/"+ user.getScreenName() + defaultPageLanding, params);
646 session.setAttribute(WebKeys.LAST_PATH, lastPath);
649 return _PATH_PORTAL_TERMS_OF_USE;
653 // Authenticated users must have a current password
655 if ((user != null) && user.isPasswordReset()) {
656 Map<String, String[]> params = new HashMap<String, String[]>();
657 String defaultPageLanding = ENTMainUtilsLocalServiceUtil.getLoginDefaultPageLanding(user.getCompanyId());
658 LastPath lastPath = new LastPath(StringPool.BLANK, "/user/"+ user.getScreenName() + defaultPageLanding, params);
659 session.setAttribute(WebKeys.LAST_PATH, lastPath);
661 return _PATH_PORTAL_UPDATE_PASSWORD;
664 // Authenticated users must have an email address
666 if ((user != null) &&
667 Validator.isNull(user.getDisplayEmailAddress())) {
669 return _PATH_PORTAL_UPDATE_EMAIL_ADDRESS;
672 // Authenticated users should have a reminder query
674 if ((user != null) &&
675 (Validator.isNull(user.getReminderQueryQuestion()) ||
676 Validator.isNull(user.getReminderQueryAnswer()))) {
678 if (PropsValues.USERS_REMINDER_QUERIES_ENABLED) {
679 return _PATH_PORTAL_UPDATE_REMINDER_QUERY;
684 // Users must sign in
686 if (!isPublicPath(path)) {
688 SessionErrors.add(request, PrincipalException.class.getName());
690 return _PATH_PORTAL_LOGIN;
694 ActionMapping mapping =
695 (ActionMapping)moduleConfig.findActionConfig(path);
697 path = mapping.getPath();
699 // Define the portlet objects
701 if (isPortletPath(path)) {
703 Portlet portlet = null;
705 long companyId = PortalUtil.getCompanyId(request);
706 String portletId = ParamUtil.getString(request, "p_p_id");
708 if (Validator.isNotNull(portletId)) {
709 portlet = PortletLocalServiceUtil.getPortletById(
710 companyId, portletId);
713 if (portlet == null) {
714 String strutsPath = path.substring(
715 1, path.lastIndexOf(CharPool.SLASH));
717 portlet = PortletLocalServiceUtil.getPortletByStrutsPath(
718 companyId, strutsPath);
721 if ((portlet != null) && portlet.isActive()) {
722 defineObjects(request, response, portlet);
725 catch (Exception e) {
726 request.setAttribute(PageContext.EXCEPTION, e);
728 path = _PATH_COMMON_ERROR;
732 // Authenticated users must have access to at least one layout
734 if (SessionErrors.contains(
735 request, LayoutPermissionException.class.getName())) {
737 return _PATH_PORTAL_ERROR;
743 protected boolean processRoles(
744 HttpServletRequest request, HttpServletResponse response,
745 ActionMapping mapping)
746 throws IOException, ServletException {
748 String path = mapping.getPath();
750 if (isPublicPath(path)) {
754 boolean authorized = true;
759 user = PortalUtil.getUser(request);
761 catch (Exception e) {
764 if ((user != null) && isPortletPath(path)) {
767 // Authenticated users can always log out
769 if (path.equals(_PATH_PORTAL_LOGOUT)) {
773 Portlet portlet = null;
775 String portletId = ParamUtil.getString(request, "p_p_id");
777 if (Validator.isNotNull(portletId)) {
778 portlet = PortletLocalServiceUtil.getPortletById(
779 user.getCompanyId(), portletId);
782 String strutsPath = path.substring(
783 1, path.lastIndexOf(CharPool.SLASH));
785 if (portlet != null) {
786 if (!strutsPath.equals(portlet.getStrutsPath())) {
787 throw new PrincipalException();
791 portlet = PortletLocalServiceUtil.getPortletByStrutsPath(
792 user.getCompanyId(), strutsPath);
795 if ((portlet != null) && portlet.isActive()) {
796 ThemeDisplay themeDisplay =
797 (ThemeDisplay)request.getAttribute(
798 WebKeys.THEME_DISPLAY);
800 Layout layout = themeDisplay.getLayout();
801 PermissionChecker permissionChecker =
802 themeDisplay.getPermissionChecker();
804 // MIGRATION MODIFICATION
805 List<Layout> privatePages = LayoutLocalServiceUtil.getLayouts(user.getGroup().getGroupId(), true);
806 Set<String> portletIds = new HashSet<String>();
807 for (Layout l: privatePages) {
808 LayoutTypePortlet ltp = (LayoutTypePortlet) l.getLayoutType();
809 List<Portlet> portlets = ltp.getAllPortlets();
810 for(Portlet p: portlets){
811 portletIds.add(p.getPortletId());
815 // Check si l'utilisateur peut voir la portlet egalement
816 if (!PortletPermissionUtil.contains(
817 permissionChecker, layout.getPlid(), portlet,
818 ActionKeys.VIEW) && !portletIds.contains(portlet.getPortletId())) {
820 throw new PrincipalException();
823 else if (portlet != null && !portlet.isActive()) {
825 request, PortletActiveException.class.getName());
830 catch (Exception e) {
832 SessionErrors.add(request, PrincipalException.class.getName());
839 ForwardConfig forwardConfig =
840 mapping.findForward(_PATH_PORTAL_ERROR);
842 processForwardConfig(request, response, forwardConfig);
851 private static String _PATH_C = "/c";
853 private static String _PATH_COMMON = "/common";
855 private static String _PATH_COMMON_ERROR = "/common/error";
857 private static String _PATH_J_SECURITY_CHECK = "/j_security_check";
859 private static String _PATH_PORTAL = "/portal";
861 private static String _PATH_PORTAL_ERROR = "/portal/error";
863 private static String _PATH_PORTAL_EXPIRE_SESSION =
864 "/portal/expire_session";
866 private static String _PATH_PORTAL_EXTEND_SESSION =
867 "/portal/extend_session";
869 private static String _PATH_PORTAL_FLASH = "/portal/flash";
871 private static String _PATH_PORTAL_J_LOGIN = "/portal/j_login";
873 private static String _PATH_PORTAL_JSON_SERVICE = "/portal/json_service";
875 private static String _PATH_PORTAL_LAYOUT = "/portal/layout";
877 private static String _PATH_PORTAL_LOGIN = "/portal/login";
879 private static String _PATH_PORTAL_LOGOUT = "/portal/logout";
881 private static String _PATH_PORTAL_PROTECTED = "/portal/protected";
883 private static String _PATH_PORTAL_RENDER_PORTLET =
884 "/portal/render_portlet";
886 private static String _PATH_PORTAL_TCK = "/portal/tck";
888 private static String _PATH_PORTAL_TERMS_OF_USE = "/portal/terms_of_use";
890 private static String _PATH_PORTAL_UPDATE_EMAIL_ADDRESS =
891 "/portal/update_email_address";
893 private static String _PATH_PORTAL_UPDATE_PASSWORD =
894 "/portal/update_password";
896 private static String _PATH_PORTAL_UPDATE_REMINDER_QUERY =
897 "/portal/update_reminder_query";
899 private static String _PATH_PORTAL_UPDATE_TERMS_OF_USE =
900 "/portal/update_terms_of_use";
902 private static Log _log = LogFactoryUtil.getLog(
903 PortalRequestProcessor.class);
905 private Set<String> _lastPaths;
906 private Set<String> _publicPaths;
907 private Set<String> _trackerIgnorePaths;