/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.web.portal.interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.enonic.cms.core.Path; import com.enonic.cms.core.security.InstantTraceSecurityHolder; import com.enonic.cms.core.structure.SitePath; import com.enonic.cms.web.portal.PortalWebContext; import com.enonic.cms.web.portal.SiteRedirectAndForwardHelper; import com.enonic.cms.web.portal.instanttrace.InstantTracePathInspector; import com.enonic.cms.web.portal.instanttrace.InstantTraceRequestInspector; @Component public class InstantTraceInterceptor implements RequestInterceptor { @Autowired private SiteRedirectAndForwardHelper siteRedirectAndForwardHelper; @Override public boolean preHandle( final PortalWebContext context ) throws Exception { if ( noPreHandle( context ) ) { return true; } forwardToAuthenticationForm( context ); return false; } @Override public void postHandle( final PortalWebContext context ) throws Exception { // nothing } private void forwardToAuthenticationForm( final PortalWebContext context ) throws Exception { final HttpServletRequest request = context.getRequest(); final HttpServletResponse response = context.getResponse(); InstantTraceRequestInspector.setAttributeOriginalUrl( context.getSitePath().getPathAndParams(), context.getRequest() ); SitePath sitePath = context.getSitePath().createNewInSameSite( new Path( "/_itrace/authenticate" ) ); siteRedirectAndForwardHelper.forward( request, response, sitePath ); } private boolean noPreHandle( final PortalWebContext context ) { if ( !InstantTraceRequestInspector.isClientEnabled( context.getRequest() ) ) { return true; } final Path localPath = context.getSitePath().getLocalPath(); if ( localPath.containsSubPath( "_public" ) ) { return true; } else if ( InstantTracePathInspector.isResourcePath( localPath ) ) { return true; } else if ( InstantTraceRequestInspector.isAuthenticationSubmitted( context.getRequest() ) ) { return true; } else if ( InstantTraceSecurityHolder.isAuthenticated() ) { return true; } else if ( InstantTracePathInspector.isAuthenticationPagePath( context.getSitePath().getLocalPath() ) ) { return true; } return false; } }