1 /** 2 * This file Copyright (c) 2003-2011 Magnolia International 3 * Ltd. (http://www.magnolia-cms.com). All rights reserved. 4 * 5 * 6 * This file is dual-licensed under both the Magnolia 7 * Network Agreement and the GNU General Public License. 8 * You may elect to use one or the other of these licenses. 9 * 10 * This file is distributed in the hope that it will be 11 * useful, but AS-IS and WITHOUT ANY WARRANTY; without even the 12 * implied warranty of MERCHANTABILITY or FITNESS FOR A 13 * PARTICULAR PURPOSE, TITLE, or NONINFRINGEMENT. 14 * Redistribution, except as permitted by whichever of the GPL 15 * or MNA you select, is prohibited. 16 * 17 * 1. For the GPL license (GPL), you can redistribute and/or 18 * modify this file under the terms of the GNU General 19 * Public License, Version 3, as published by the Free Software 20 * Foundation. You should have received a copy of the GNU 21 * General Public License, Version 3 along with this program; 22 * if not, write to the Free Software Foundation, Inc., 51 23 * Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 24 * 25 * 2. For the Magnolia Network Agreement (MNA), this file 26 * and the accompanying materials are made available under the 27 * terms of the MNA which accompanies this distribution, and 28 * is available at http://www.magnolia-cms.com/mna.html 29 * 30 * Any modifications to this file must keep this entire header 31 * intact. 32 * 33 */ 34 package info.magnolia.cms.security.auth.callback; 35 36 import info.magnolia.cms.util.PatternDelegate; 37 import info.magnolia.cms.util.UrlPatternDelegate; 38 39 import javax.servlet.http.HttpServletRequest; 40 import javax.servlet.http.HttpServletResponse; 41 42 import org.apache.commons.lang.ArrayUtils; 43 44 45 /** 46 * A simple "composite" callback that delegates to other callbacks based on rules (a list of {@link PatternDelegate}). 47 * It can be used to configured different callbacks for different urls, see this sample configuration for an example: 48 * 49 * <pre> 50 * + clientCallback 51 * + patterns 52 * + admin 53 * + delegate 54 * - class info.magnolia.cms.security.auth.callback.FormClientCallback 55 * - loginForm /mgnl-resources/loginForm/login.html 56 * - realmName Magnolia 57 * - class info.magnolia.cms.util.UrlPatternDelegate 58 * - url /.magnolia* 59 * + public 60 * + delegate 61 * - class info.magnolia.cms.security.auth.callback.FormClientCallback 62 * - loginForm /mgnl-resources/public-login.html 63 * - realmName Magnolia 64 * - class info.magnolia.cms.util.UrlPatternDelegate 65 * - url /* 66 * - class info.magnolia.cms.security.auth.callback.CompositeCallback 67 * </pre> 68 * 69 * @author fgiust 70 * @version $Id$ 71 * @deprecated since 4.5 - not needed anymore. The {@link info.magnolia.cms.security.SecurityCallbackFilter} can 72 * be configured to accept multiple {@link HttpClientCallback}s, and the callback themselves accept a request or not. 73 */ 74 public class CompositeCallback implements HttpClientCallback { 75 76 private PatternDelegate[] patterns = new UrlPatternDelegate[0]; 77 78 @Override 79 public boolean accepts(HttpServletRequest request) { 80 for (PatternDelegate pattern : patterns) { 81 if (pattern.match(request)) { 82 return true; 83 } 84 } 85 return false; 86 } 87 88 /** 89 * Delegates the processing to the first matching Callback in patterns. 90 */ 91 @Override 92 public void handle(HttpServletRequest request, HttpServletResponse response) { 93 for (PatternDelegate pattern : patterns) { 94 if (pattern.match(request)) { 95 ((HttpClientCallback) pattern.getDelegate()).handle(request, response); 96 break; 97 } 98 } 99 } 100 101 // ----- configuration methods 102 public PatternDelegate[] getPatterns() { 103 return this.patterns; 104 } 105 106 public void addPattern(PatternDelegate pattern) { 107 this.patterns = (PatternDelegate[]) ArrayUtils.add(this.patterns, pattern); 108 } 109 }