/* * $Id: IWWelcomeFilter.java,v 1.20 2007/12/10 21:00:02 eiki Exp $ * Created on 31.7.2004 by tryggvil * * Copyright (C) 2005 Idega Software hf. All Rights Reserved. * * This software is the proprietary information of Idega hf. * Use is subject to license terms. */ package com.idega.servlet.filter; import java.io.IOException; import java.util.HashMap; import java.util.Map; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.idega.idegaweb.IWMainApplication; import com.idega.servlet.filter.util.PagesRedirectHandler; import com.idega.util.IWTimestamp; import com.idega.util.RequestUtil; /** * <p> * This filter detects the incoming url and sends them to the appropriate one if the requestUri of the incoming request is coming to the root of the. * </p> * * Last modified: $Date: 2007/12/10 21:00:02 $ by $Author: eiki $ * * @author <a href="mailto:tryggvil@idega.com">tryggvil</a> * @version $Revision: 1.20 $ */ public class IWWelcomeFilter extends BaseFilter { /*private static final boolean DEFAULT_VALUE_IS_INIT = false; private static boolean isInit= DEFAULT_VALUE_IS_INIT; private static final boolean DEFAULT_VALUE_START_ON_WORKSPACE = true; private static boolean startOnWorkspace= DEFAULT_VALUE_START_ON_WORKSPACE; private static final boolean DEFAULT_VALUE_START_ON_PAGES = false; private static boolean startOnPages= DEFAULT_VALUE_START_ON_PAGES; */ private Map initializedPages=new HashMap(); private Map synchronizationObjects=new HashMap(); private static final String PROPERTY_LOG_REQUESTS = "com.idega.core.logrequests"; public static void unload() { //isInit = DEFAULT_VALUE_IS_INIT; //startOnWorkspace = DEFAULT_VALUE_START_ON_WORKSPACE; //startOnPages = DEFAULT_VALUE_START_ON_PAGES; } /* (non-Javadoc) * @see javax.servlet.Filter#init(javax.servlet.FilterConfig) */ public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub } /* (non-Javadoc) * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain) */ public void doFilter(ServletRequest srequest, ServletResponse sresponse, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest)srequest; HttpServletResponse response = (HttpServletResponse)sresponse; /*if(!isInit(request,response)){ init(request,response); }*/ IWMainApplication iwma = IWMainApplication.getIWMainApplication(request.getSession().getServletContext()); String appUri = iwma.getApplicationContextURI(); String requestUri = request.getRequestURI(); String SLASH = "/"; if(!appUri.endsWith(SLASH)){ appUri =appUri+SLASH; } boolean logRequests = getLogRequests(request); if(logRequests){ logRequest(request); } if(requestUri.equals(appUri)){ boolean startOnWorkspace=getIfStartOnWorkspace(request); if(startOnWorkspace){ response.sendRedirect(getNewWorkspaceUri(request)); } else{ boolean doRedirect = true; String handlerClass = iwma.getSettings().getProperty(PagesRedirectHandler.ATTRIBUTE_PAGES_REDIRECT_HANDLER_CLASS); if (handlerClass != null) { try { PagesRedirectHandler handler = (PagesRedirectHandler) Class.forName(handlerClass).newInstance(); doRedirect = handler.isForwardOnRootURIRequest(request, response); } catch (Exception e) { //Class not found... } } if (doRedirect) { String pagesUri = getPagesUri(request); response.sendRedirect(pagesUri); } else { chain.doFilter(srequest,sresponse); } } } else{ /** * This Clause is here to protect the server in high loads so that * the server will let the first accessor on each pages cache it self up. */ if(isSynchronizeFirstAccess(request,response)){ Object syncObject = getSynchronizationObject(request,response); synchronized(syncObject){ chain.doFilter(srequest,sresponse); setSynchronizedFirstAccess(request,response); } } else{ chain.doFilter(srequest,sresponse); } } } private boolean getIfStartOnWorkspace(HttpServletRequest request) { return getCachedDomain(request).isStartOnWorkspace(); } /** * <p> * TODO tryggvil describe method logRequest * </p> * @param request */ private void logRequest(HttpServletRequest request) { String ip = request.getRemoteAddr(); String timestamp = IWTimestamp.RightNow().toString(); String method = request.getMethod(); String requestUri = request.getRequestURI(); String userAgent = RequestUtil.getUserAgent(request); String protocol = request.getProtocol(); //127.0.0.1 - - [22/Feb/2006:09:27:41 +0000] "GET / HTTP/1.1" 200 789 "-" "idegaWeb Web Search Engine Crawler http://www.idega.com" StringBuffer buf = new StringBuffer(); buf.append(ip); buf.append(" - - "); buf.append("["); buf.append(timestamp); buf.append("] "); buf.append(method); buf.append(" "); buf.append(requestUri); buf.append(" "); buf.append(protocol); buf.append(" - - \"-\" "); buf.append(" \""+userAgent+"\""); System.out.println(buf); } /** * <p> * TODO tryggvil describe method getLogRequests * </p> * @param request * @return */ private boolean getLogRequests(HttpServletRequest request) { IWMainApplication iwma = getIWMainApplication(request); String prop = iwma.getSettings().getProperty(PROPERTY_LOG_REQUESTS); if(prop==null){ return false; } else{ return Boolean.valueOf(prop).booleanValue(); } } /*private void init(HttpServletRequest request, HttpServletResponse response) { IWMainApplication iwma = IWMainApplication.getIWMainApplication(request.getSession().getServletContext()); try { BuilderService bService = (BuilderService)IBOLookup.getServiceInstance(iwma.getIWApplicationContext(),BuilderService.class); ICPage rootPage = bService.getRootPage(); boolean startOnPages=false; boolean startOnWorkspace=false; if(rootPage!=null){ //set the filter to forward to /pages if there is a rootPage created startOnPages=true; startOnWorkspace=false; } else{ startOnWorkspace=true; startOnPages=false; } //String serverName = request.getServerName(); //int port = request.getLocalPort(); //if(port!=80){ // serverName += ":"+port; //} iwma.getIWApplicationContext().getDomain().setServerName(serverName); //IWContext iwc = new IWContext(request,response, request.getSession().getServletContext()); //This sets the domain by default: //iwc.getDomain(); //initializeDefaultDomain(request); //Done to initialize the domain: getDomain(request); } catch (Exception e) { e.printStackTrace(); } catch (IDONoDatastoreError de) { if(!iwma.isInDatabaseLessMode()){ de.printStackTrace(); } } }*/ /* (non-Javadoc) * @see javax.servlet.Filter#destroy() */ public void destroy() { // TODO Auto-generated method stub } protected synchronized Object getSynchronizationObject(HttpServletRequest request, HttpServletResponse response) { String requestUri = request.getRequestURI(); Object value = synchronizationObjects.get(requestUri); if(value==null){ value = requestUri; synchronizationObjects.put(requestUri,value); } return value; } protected boolean isSynchronizeFirstAccess(HttpServletRequest request, HttpServletResponse response) { String requestUri = request.getRequestURI(); return initializedPages.containsKey(requestUri); } protected void setSynchronizedFirstAccess(HttpServletRequest request, HttpServletResponse response) { String requestUri = request.getRequestURI(); initializedPages.put(requestUri,requestUri); } }