15 changed files with 0 additions and 1241 deletions
@ -1,52 +0,0 @@
@@ -1,52 +0,0 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> |
||||
<modelVersion>4.0.0</modelVersion> |
||||
<groupId>org.acegisecurity</groupId> |
||||
<artifactId>acegi-security-samples-acegifier</artifactId> |
||||
<packaging>war</packaging> |
||||
<name>acegi-security-samples-acegifier</name> |
||||
<parent> |
||||
<groupId>org.acegisecurity</groupId> |
||||
<artifactId>acegi-security-samples</artifactId> |
||||
<version>1.0.5-SNAPSHOT</version> |
||||
</parent> |
||||
<dependencies> |
||||
<dependency> |
||||
<groupId>org.acegisecurity</groupId> |
||||
<artifactId>acegi-security</artifactId> |
||||
<version>${pom.version}</version> |
||||
<type>jar</type> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.springframework</groupId> |
||||
<artifactId>spring-webmvc</artifactId> |
||||
<version>2.0.4</version> |
||||
<type>jar</type> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>javax.servlet</groupId> |
||||
<artifactId>servlet-api</artifactId> |
||||
<version>2.4</version> |
||||
<scope>provided</scope> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>dom4j</groupId> |
||||
<artifactId>dom4j</artifactId> |
||||
<version>1.6</version> |
||||
<type>jar</type> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>jaxen</groupId> |
||||
<artifactId>jaxen</artifactId> |
||||
<version>1.1-beta-8</version> |
||||
<type>jar</type> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>freemarker</groupId> |
||||
<artifactId>freemarker</artifactId> |
||||
<version>2.3.4</version> |
||||
<type>jar</type> |
||||
</dependency> |
||||
</dependencies> |
||||
|
||||
</project> |
||||
@ -1,45 +0,0 @@
@@ -1,45 +0,0 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?> |
||||
<project> |
||||
<extend>${basedir}/../project.xml</extend> |
||||
<pomVersion>3</pomVersion> |
||||
<artifactId>acegi-security-sample-acegifier</artifactId> |
||||
<name>Acegi Security System for Spring - Acegifier sample</name> |
||||
<siteDirectory>/home/groups/a/ac/acegisecurity/htdocs/multiproject/acegi-security-sample-acegifier</siteDirectory> |
||||
<repository> |
||||
<connection>scm:svn:https://acegisecurity.svn.sourceforge.net/svnroot/acegisecurity/trunk/acegisecurity</connection> |
||||
<developerConnection>scm:svn:https://acegisecurity.svn.sourceforge.net/svnroot/acegisecurity/trunk/acegisecurity</developerConnection> |
||||
<url>http://acegisecurity.svn.sourceforge.net/viewcvs.cgi/acegisecurity/trunk/acegisecurity/samples/acegifier/</url> |
||||
</repository> |
||||
<dependencies> |
||||
<dependency> |
||||
<groupId>dom4j</groupId> |
||||
<artifactId>dom4j</artifactId> |
||||
<version>1.6</version> |
||||
<type>jar</type> |
||||
<url>http://www.dom4j.org</url> |
||||
<properties> |
||||
<war.bundle>true</war.bundle> |
||||
</properties> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>jaxen</groupId> |
||||
<artifactId>jaxen</artifactId> |
||||
<version>1.1-beta-8</version> |
||||
<type>jar</type> |
||||
<url>http://www.jaxen.org</url> |
||||
<properties> |
||||
<war.bundle>true</war.bundle> |
||||
</properties> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>freemarker</groupId> |
||||
<artifactId>freemarker</artifactId> |
||||
<version>2.3.4</version> |
||||
<type>jar</type> |
||||
<url>http://www.freemarker.org/</url> |
||||
<properties> |
||||
<war.bundle>true</war.bundle> |
||||
</properties> |
||||
</dependency> |
||||
</dependencies> |
||||
</project> |
||||
@ -1,144 +0,0 @@
@@ -1,144 +0,0 @@
|
||||
package acegifier; |
||||
|
||||
import java.io.IOException; |
||||
import java.io.InputStream; |
||||
import java.util.List; |
||||
|
||||
import javax.xml.transform.Source; |
||||
import javax.xml.transform.Transformer; |
||||
import javax.xml.transform.TransformerConfigurationException; |
||||
import javax.xml.transform.TransformerException; |
||||
import javax.xml.transform.TransformerFactory; |
||||
import javax.xml.transform.stream.StreamSource; |
||||
|
||||
import org.dom4j.Document; |
||||
import org.dom4j.DocumentException; |
||||
import org.dom4j.DocumentHelper; |
||||
import org.dom4j.Node; |
||||
import org.dom4j.io.DocumentResult; |
||||
import org.dom4j.io.DocumentSource; |
||||
import org.dom4j.io.SAXReader; |
||||
import org.springframework.core.io.ClassPathResource; |
||||
import org.springframework.util.Assert; |
||||
|
||||
/** |
||||
* A utility to translate a web.xml file into a set of acegi security spring beans. |
||||
* |
||||
* <p> |
||||
* Also produces a new "acegified" web.xml file with the necessary filters installed |
||||
* and the security elements defined by the servlet DTD removed. |
||||
* |
||||
* <p> |
||||
* This class wraps the XSL transform which actually does most of the work. |
||||
* </p> |
||||
* |
||||
* @author Luke Taylor |
||||
* @version $Id$ |
||||
*/ |
||||
public class WebXmlConverter { |
||||
private static final String WEB_TO_SPRING_XSL_FILE = "web-to-spring.xsl"; |
||||
private static final String NEW_WEB_XSLT_FILE = "acegi-web.xsl"; |
||||
|
||||
private Transformer acegiSecurityTransformer, newWebXmlTransformer; |
||||
|
||||
/** |
||||
* The name of the spring-beans file which the beans will be stored in. |
||||
* This is required when writing the new web.xml content. |
||||
*/ |
||||
private String acegiOutputFileName = "applicationContext-acegi-security.xml"; |
||||
|
||||
/** The web.xml content to be converted */ |
||||
private Source xmlSource; |
||||
/** The results of the conversion */ |
||||
private Document newWebXml, acegiBeansXml; |
||||
|
||||
public WebXmlConverter() throws IOException, TransformerConfigurationException { |
||||
TransformerFactory tf = TransformerFactory.newInstance(); |
||||
Source source = createTransformerSource(WEB_TO_SPRING_XSL_FILE); |
||||
System.out.println("1"); |
||||
acegiSecurityTransformer = tf.newTransformer(source); |
||||
System.out.println("2"); |
||||
newWebXmlTransformer = tf.newTransformer(createTransformerSource(NEW_WEB_XSLT_FILE)); |
||||
System.out.println("3"); |
||||
} |
||||
|
||||
private Source createTransformerSource(String fileName) throws IOException { |
||||
ClassPathResource resource = new ClassPathResource(fileName); |
||||
Source source = new StreamSource(resource.getInputStream()); |
||||
return source; |
||||
} |
||||
|
||||
/** |
||||
* Performs the transformations on the input source. |
||||
* Creates new web.xml content and a set of acegi-security Spring beans which can be |
||||
* accessed through the appropriate getter methods. |
||||
*/ |
||||
public void doConversion() throws IOException, TransformerException { |
||||
Assert.notNull(xmlSource, "The XML input must be set"); |
||||
|
||||
// Create the modified web.xml file
|
||||
newWebXmlTransformer.setParameter("acegi-security-context-file", acegiOutputFileName); |
||||
// newWebXmlTransformer.setParameter("cas-proxy-url", "http://localhost:8433/cas/proxy");
|
||||
DocumentResult result = new DocumentResult(); |
||||
newWebXmlTransformer.transform(xmlSource, result); |
||||
newWebXml = result.getDocument(); |
||||
|
||||
result = new DocumentResult(); |
||||
acegiSecurityTransformer.transform(xmlSource, result); |
||||
acegiBeansXml = result.getDocument(); |
||||
} |
||||
|
||||
/** Set the input as an xml string */ |
||||
public void setInput(String xml) throws DocumentException { |
||||
setInput(DocumentHelper.parseText(xml)); |
||||
} |
||||
|
||||
/** Set the input as a stream */ |
||||
public void setInput(InputStream in) throws DocumentException { |
||||
SAXReader reader = new SAXReader(); |
||||
setInput(reader.read(in)); |
||||
} |
||||
|
||||
/** set the input as a dom4j document */ |
||||
public void setInput(Document document) throws DocumentException { |
||||
validateWebXml(document); |
||||
xmlSource = new DocumentSource(document); |
||||
} |
||||
|
||||
/** Checks the web.xml to make sure it contains correct data */ |
||||
private void validateWebXml(Document document) throws DocumentException { |
||||
Node authMethodNode = |
||||
document.selectSingleNode("/web-app/login-config/auth-method"); |
||||
if (authMethodNode == null) |
||||
throw new DocumentException("login-config and auth-method must be present"); |
||||
String authMethod = authMethodNode.getStringValue().toUpperCase(); |
||||
if (!authMethod.equals("BASIC") && !authMethod.equals("FORM")) { |
||||
throw new DocumentException("unsupported auth-method: " + authMethod); |
||||
} |
||||
List roles = document.selectNodes("/web-app/security-role"); |
||||
if (roles.isEmpty()) { |
||||
throw new DocumentException("Each role used must be defined in a security-role element"); |
||||
} |
||||
} |
||||
|
||||
public String getAcegiOutputFileName() { |
||||
return acegiOutputFileName; |
||||
} |
||||
|
||||
public void setAcegiOutputFileName(String acegiOutputFileName) { |
||||
this.acegiOutputFileName = acegiOutputFileName; |
||||
} |
||||
|
||||
/** Returns the converted web.xml content */ |
||||
public Document getNewWebXml() { |
||||
return newWebXml; |
||||
} |
||||
|
||||
/** |
||||
* Returns the created spring-beans xml content which should be used in |
||||
* the application context file. |
||||
*/ |
||||
public Document getAcegiBeans() { |
||||
return acegiBeansXml; |
||||
} |
||||
} |
||||
@ -1,158 +0,0 @@
@@ -1,158 +0,0 @@
|
||||
/* Copyright 2004, 2005, 2006 Acegi Technology Pty Limited |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package acegifier.web; |
||||
|
||||
import acegifier.WebXmlConverter; |
||||
|
||||
import org.acegisecurity.util.FilterChainProxy; |
||||
import org.acegisecurity.util.InMemoryResource; |
||||
|
||||
import org.dom4j.Document; |
||||
import org.dom4j.DocumentException; |
||||
|
||||
import org.dom4j.io.OutputFormat; |
||||
import org.dom4j.io.XMLWriter; |
||||
|
||||
import org.springframework.beans.BeansException; |
||||
import org.springframework.beans.factory.support.DefaultListableBeanFactory; |
||||
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader; |
||||
|
||||
import org.springframework.validation.BindException; |
||||
import org.springframework.validation.Errors; |
||||
|
||||
import org.springframework.web.servlet.ModelAndView; |
||||
import org.springframework.web.servlet.mvc.SimpleFormController; |
||||
|
||||
import java.io.ByteArrayOutputStream; |
||||
import java.io.IOException; |
||||
|
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
|
||||
import javax.servlet.http.HttpServletRequest; |
||||
import javax.servlet.http.HttpServletResponse; |
||||
|
||||
import javax.xml.transform.TransformerException; |
||||
|
||||
|
||||
/** |
||||
* Takes a submitted web.xml, applies the transformer to it and returns the resulting modified web.xml and |
||||
* acegi-app-context.xml file contents. |
||||
* |
||||
* @author Luke Taylor |
||||
* @version $Id$ |
||||
*/ |
||||
public class AcegifierController extends SimpleFormController { |
||||
//~ Constructors ===================================================================================================
|
||||
|
||||
public AcegifierController() {} |
||||
|
||||
//~ Methods ========================================================================================================
|
||||
|
||||
/** |
||||
* Creates a BeanFactory from the spring beans XML document |
||||
* |
||||
* @param beans DOCUMENT ME! |
||||
* |
||||
* @return DOCUMENT ME! |
||||
*/ |
||||
private DefaultListableBeanFactory createBeanFactory(Document beans) { |
||||
DefaultListableBeanFactory bf = new DefaultListableBeanFactory(); |
||||
XmlBeanDefinitionReader beanReader = new XmlBeanDefinitionReader(bf); |
||||
beanReader.loadBeanDefinitions(new InMemoryResource(beans.asXML().getBytes())); |
||||
|
||||
return bf; |
||||
} |
||||
|
||||
public ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, |
||||
BindException errors) throws Exception { |
||||
AcegifierForm conversion = (AcegifierForm) command; |
||||
WebXmlConverter converter = new WebXmlConverter(); |
||||
int nBeans = 0; |
||||
Document newWebXml = null; |
||||
Document acegiBeans = null; |
||||
|
||||
try { |
||||
converter.setInput(conversion.getWebXml()); |
||||
converter.doConversion(); |
||||
newWebXml = converter.getNewWebXml(); |
||||
acegiBeans = converter.getAcegiBeans(); |
||||
nBeans = validateAcegiBeans(conversion, acegiBeans, errors); |
||||
} catch (DocumentException de) { |
||||
errors.rejectValue("webXml", "webXmlDocError", "There was a problem with your web.xml: " + de.getMessage()); |
||||
} catch (TransformerException te) { |
||||
errors.rejectValue("webXml", "transFailure", |
||||
"There was an error during the XSL transformation: " + te.getMessage()); |
||||
} |
||||
|
||||
if (errors.hasErrors()) { |
||||
return showForm(request, response, errors); |
||||
} |
||||
|
||||
Map model = new HashMap(); |
||||
model.put("webXml", prettyPrint(newWebXml)); |
||||
model.put("acegiBeansXml", prettyPrint(acegiBeans)); |
||||
model.put("nBeans", new Integer(nBeans)); |
||||
|
||||
return new ModelAndView("acegificationResults", model); |
||||
} |
||||
|
||||
/** |
||||
* Creates a formatted XML string from the supplied document |
||||
* |
||||
* @param document DOCUMENT ME! |
||||
* |
||||
* @return DOCUMENT ME! |
||||
* |
||||
* @throws IOException DOCUMENT ME! |
||||
*/ |
||||
private String prettyPrint(Document document) throws IOException { |
||||
ByteArrayOutputStream output = new ByteArrayOutputStream(); |
||||
OutputFormat format = OutputFormat.createPrettyPrint(); |
||||
format.setTrimText(false); |
||||
|
||||
XMLWriter writer = new XMLWriter(output, format); |
||||
writer.write(document); |
||||
writer.flush(); |
||||
writer.close(); |
||||
|
||||
return output.toString(); |
||||
} |
||||
|
||||
/** |
||||
* Validates the acegi beans, based on the input form data, and returns the number of spring beans defined |
||||
* in the document. |
||||
* |
||||
* @param conversion DOCUMENT ME! |
||||
* @param beans DOCUMENT ME! |
||||
* @param errors DOCUMENT ME! |
||||
* |
||||
* @return DOCUMENT ME! |
||||
*/ |
||||
private int validateAcegiBeans(AcegifierForm conversion, Document beans, Errors errors) { |
||||
DefaultListableBeanFactory bf = createBeanFactory(beans); |
||||
|
||||
//TODO: actually do some proper validation!
|
||||
try { |
||||
bf.getBean("filterChainProxy", FilterChainProxy.class); |
||||
} catch (BeansException be) { |
||||
errors.rejectValue("webXml", "beansInvalid", |
||||
"There was an error creating or accessing the bean factory " + be.getMessage()); |
||||
} |
||||
|
||||
return bf.getBeanDefinitionCount(); |
||||
} |
||||
} |
||||
@ -1,38 +0,0 @@
@@ -1,38 +0,0 @@
|
||||
/* Copyright 2004, 2005, 2006 Acegi Technology Pty Limited |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package acegifier.web; |
||||
|
||||
/** |
||||
* Form backing object for the Acegifier controller. |
||||
* |
||||
* @author Luke Taylor |
||||
* @version $Id$ |
||||
*/ |
||||
public class AcegifierForm { |
||||
//~ Instance fields ================================================================================================
|
||||
|
||||
private String webXml; |
||||
|
||||
//~ Methods ========================================================================================================
|
||||
|
||||
public String getWebXml() { |
||||
return webXml; |
||||
} |
||||
|
||||
public void setWebXml(String webXml) { |
||||
this.webXml = webXml; |
||||
} |
||||
} |
||||
@ -1,118 +0,0 @@
@@ -1,118 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
||||
<!-- |
||||
| XSL Sheet used by the web.xml to acegi-security beans converter |
||||
| to create the new acegified web.xml. |
||||
| $Id$ |
||||
--> |
||||
|
||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> |
||||
|
||||
<!-- The CAS proxy url (left empty if not to be used) --> |
||||
<xsl:param name="cas-proxy-url"/> |
||||
<!-- The acegi context file name - used in the --> |
||||
<xsl:param name="acegi-security-context-file" select="'applicationContext-acegi-security.xml'"/> |
||||
|
||||
<xsl:output doctype-public="-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" |
||||
doctype-system="http://java.sun.com/dtd/web-app_2_3.dtd" |
||||
indent="yes"/> |
||||
|
||||
<!-- Identity template which we override for specific cases --> |
||||
<xsl:template match="@*|node()"> |
||||
<xsl:copy> |
||||
<xsl:apply-templates select="@*|node()"/> |
||||
</xsl:copy> |
||||
</xsl:template> |
||||
|
||||
<xsl:template match="web-app"> |
||||
<web-app> |
||||
<xsl:apply-templates select="icon|display-name|description|distributable"/> |
||||
<xsl:apply-templates select="context-param"/> |
||||
<xsl:call-template name="insert-spring-context-param"/> |
||||
<xsl:if test="$cas-proxy-url"> |
||||
<!-- Required for CAS ProxyTicketReceptor servlet. This is the |
||||
URL to CAS' "proxy" actuator, where a PGT and TargetService can |
||||
be presented to obtain a new proxy ticket. THIS CAN BE |
||||
REMOVED IF THE APPLICATION DOESN'T NEED TO ACT AS A PROXY --> |
||||
<context-param> |
||||
<param-name>edu.yale.its.tp.cas.proxyUrl</param-name> |
||||
<param-value><xsl:value-of select="$cas-proxy-url"/></param-value> |
||||
</context-param> |
||||
<xsl:text>

</xsl:text> |
||||
</xsl:if> |
||||
|
||||
<filter> |
||||
<filter-name>Acegi Filter Chain Proxy</filter-name> |
||||
<filter-class>org.acegisecurity.util.FilterToBeanProxy</filter-class> |
||||
<init-param> |
||||
<param-name>targetClass</param-name> |
||||
<param-value>org.acegisecurity.util.FilterChainProxy</param-value> |
||||
</init-param> |
||||
</filter> |
||||
<xsl:text>

</xsl:text> |
||||
|
||||
<xsl:apply-templates select="filter"/> |
||||
|
||||
<filter-mapping> |
||||
<filter-name>Acegi Filter Chain Proxy</filter-name> |
||||
<url-pattern>/*</url-pattern> |
||||
</filter-mapping> |
||||
<xsl:text>

</xsl:text> |
||||
|
||||
<xsl:apply-templates select="filter-mapping"/> |
||||
|
||||
<!-- Only add a spring context loader listener if there isn't one there already --> |
||||
<xsl:if test="not(./listener/listener-class[string()='org.springframework.web.context.ContextLoaderListener'])"> |
||||
<listener> |
||||
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> |
||||
</listener> |
||||
<xsl:text>

</xsl:text> |
||||
</xsl:if> |
||||
|
||||
<xsl:apply-templates select="listener"/> |
||||
|
||||
<!-- Run any remaining non-security elements through the identity template --> |
||||
<xsl:apply-templates select="servlet|servlet-mapping|session-config|mime-mapping|welcome-file-list|error-page|taglib|resource-env-ref|resource-ref|env-entry|ejb-ref|ejb-local-ref"/> |
||||
|
||||
</web-app> |
||||
</xsl:template> |
||||
|
||||
<!-- |
||||
| Looks for the case where we have an existing Spring context and appends |
||||
| the acegi file to the list of app. context files. Otherwise just copies the contents. |
||||
--> |
||||
<xsl:template match="context-param"> |
||||
<context-param> |
||||
<xsl:choose> |
||||
<xsl:when test="./param-name = 'contextConfigLocation'"> |
||||
<param-name>contextConfigLocation</param-name> |
||||
<param-value> |
||||
<xsl:value-of select="./param-value"/> |
||||
<xsl:value-of select="concat(' /WEB-INF/',$acegi-security-context-file)"/><xsl:text>
 </xsl:text> |
||||
</param-value> |
||||
</xsl:when> |
||||
<xsl:otherwise> |
||||
<xsl:apply-templates /> |
||||
</xsl:otherwise> |
||||
</xsl:choose> |
||||
</context-param> |
||||
<xsl:text>

</xsl:text> |
||||
</xsl:template> |
||||
|
||||
<!-- |
||||
| Inserts a Spring config location context-param if one doesn't already exist. |
||||
| If there is one, do nothing as it will be handled by the context-param template above. |
||||
--> |
||||
<xsl:template name="insert-spring-context-param"> |
||||
<xsl:if test="not(./context-param/param-name[string() = 'contextConfigLocation'])"> |
||||
<context-param> |
||||
<param-name>contextConfigLocation</param-name> |
||||
<param-value> |
||||
<xsl:value-of select="concat('/WEB-INF/',$acegi-security-context-file)"/><xsl:text>
</xsl:text> |
||||
</param-value> |
||||
</context-param> |
||||
<xsl:text>

</xsl:text> |
||||
</xsl:if> |
||||
</xsl:template> |
||||
|
||||
</xsl:stylesheet> |
||||
@ -1,302 +0,0 @@
@@ -1,302 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
||||
<!-- |
||||
| XSL Sheet used by the web.xml to acegi-security beans converter |
||||
| $Id$ |
||||
--> |
||||
|
||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> |
||||
|
||||
<xsl:output doctype-public="-//SPRING//DTD BEAN//EN" |
||||
doctype-system="http://www.springframework.org/dtd/spring-beans.dtd" |
||||
indent="no"/> |
||||
|
||||
<!-- Variables for case conversions --> |
||||
<xsl:variable name="lowercase" select="'abcdefghijklmnopqrstuvwxyz'"/> |
||||
<xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/> |
||||
|
||||
<xsl:variable name="welcome-files" select="web-app/welcome-file-list/welcome-file"/> |
||||
|
||||
<!-- Convert the auth-method content to upper case --> |
||||
<xsl:variable name="auth-method" select="translate(string(web-app/login-config/auth-method), $lowercase, $uppercase)"/> |
||||
|
||||
<!-- |
||||
| Find the security-role elements in the file and uses them to build a list of |
||||
| all defined roles. |
||||
--> |
||||
<xsl:variable name="all-roles"> |
||||
<xsl:for-each select="web-app/security-role/role-name"> |
||||
<xsl:text>ROLE_</xsl:text> |
||||
<xsl:value-of select="translate(string(), $lowercase, $uppercase)"/> |
||||
<xsl:if test="position() != last()">,</xsl:if> |
||||
</xsl:for-each> |
||||
</xsl:variable> |
||||
|
||||
<!-- |
||||
| The list of filters for use in filterToBeanProxy |
||||
--> |
||||
<xsl:variable name="filter-list"> |
||||
<xsl:text>/**=httpSessionContextIntegrationFilter</xsl:text> |
||||
<xsl:choose> |
||||
<xsl:when test="$auth-method = 'FORM'"> |
||||
<xsl:text>,authenticationProcessingFilter</xsl:text> |
||||
</xsl:when> |
||||
<xsl:when test="$auth-method = 'BASIC'"> |
||||
<xsl:text>,basicProcessingFilter</xsl:text> |
||||
</xsl:when> |
||||
<xsl:otherwise> |
||||
<xsl:message terminate="yes">Unsupported auth-method in web.xml, must be FORM or BASIC</xsl:message> |
||||
</xsl:otherwise> |
||||
</xsl:choose> |
||||
<xsl:text>,rememberMeProcessingFilter,anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor</xsl:text> |
||||
</xsl:variable> |
||||
|
||||
<!-- |
||||
| The main template (where the processing work starts) |
||||
--> |
||||
<xsl:template match = "web-app"> |
||||
|
||||
<beans> |
||||
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> |
||||
<property name="basename"><value>messages</value></property> |
||||
</bean> |
||||
<xsl:text>

</xsl:text> |
||||
<xsl:call-template name="filter-to-bean-proxy"/> |
||||
<xsl:call-template name="authentication-beans"/> |
||||
<xsl:apply-templates select="./login-config"/> |
||||
<xsl:call-template name="filter-invocation-interceptor"/> |
||||
</beans> |
||||
</xsl:template> |
||||
|
||||
<!-- |
||||
| Mainly static set of beans. The InMemoryDaoImpl instance is created with a single user |
||||
| called "superuser" who has all the defined roles in the web.xml file. |
||||
--> |
||||
<xsl:template name="authentication-beans"> |
||||
<xsl:comment>======================== AUTHENTICATION =======================</xsl:comment> |
||||
|
||||
<bean id="authenticationManager" class="org.acegisecurity.providers.ProviderManager"> |
||||
<property name="messageSource"><ref local="messageSource"/></property> |
||||
<property name="providers"> |
||||
<list> |
||||
<ref local="daoAuthenticationProvider"/> |
||||
<ref local="anonymousAuthenticationProvider"/> |
||||
<ref local="rememberMeAuthenticationProvider"/> |
||||
</list> |
||||
</property> |
||||
</bean> |
||||
<xsl:text>

</xsl:text> |
||||
<bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider"> |
||||
<property name="messageSource"><ref local="messageSource"/></property> |
||||
<property name="userDetailsService"><ref local="inMemoryDaoImpl"/></property> |
||||
<!-- property name="userCache"><ref local="userCache"/></property--> |
||||
</bean> |
||||
<xsl:text>

</xsl:text> |
||||
|
||||
<bean id="inMemoryDaoImpl" class="org.acegisecurity.userdetails.memory.InMemoryDaoImpl"> |
||||
<property name="userMap"> |
||||
<value> |
||||
superuser=password,<xsl:value-of select="$all-roles"/> |
||||
<xsl:text>
 </xsl:text> |
||||
</value> |
||||
</property> |
||||
</bean> |
||||
<xsl:text>

</xsl:text> |
||||
|
||||
<bean id="anonymousProcessingFilter" class="org.acegisecurity.providers.anonymous.AnonymousProcessingFilter"> |
||||
<property name="key"><value>foobar</value></property> |
||||
<property name="userAttribute"><value>anonymousUser,ROLE_ANONYMOUS</value></property> |
||||
</bean> |
||||
<xsl:text>

</xsl:text> |
||||
|
||||
<bean id="anonymousAuthenticationProvider" class="org.acegisecurity.providers.anonymous.AnonymousAuthenticationProvider"> |
||||
<property name="messageSource"><ref local="messageSource"/></property> |
||||
<property name="key"><value>foobar</value></property> |
||||
</bean> |
||||
<xsl:text>

</xsl:text> |
||||
|
||||
<bean id="httpSessionContextIntegrationFilter" class="org.acegisecurity.context.HttpSessionContextIntegrationFilter"/> |
||||
<xsl:text>

</xsl:text> |
||||
|
||||
<bean id="rememberMeProcessingFilter" class="org.acegisecurity.ui.rememberme.RememberMeProcessingFilter"> |
||||
<property name="rememberMeServices"><ref local="rememberMeServices"/></property> |
||||
</bean> |
||||
<xsl:text>

</xsl:text> |
||||
|
||||
<bean id="rememberMeServices" class="org.acegisecurity.ui.rememberme.TokenBasedRememberMeServices"> |
||||
<property name="userDetailsService"><ref local="inMemoryDaoImpl"/></property> |
||||
<property name="key"><value>springRocks</value></property> |
||||
</bean> |
||||
<xsl:text>

</xsl:text> |
||||
|
||||
<bean id="rememberMeAuthenticationProvider" class="org.acegisecurity.providers.rememberme.RememberMeAuthenticationProvider"> |
||||
<property name="messageSource"><ref local="messageSource"/></property> |
||||
<property name="key"><value>springRocks</value></property> |
||||
</bean> |
||||
<xsl:text>

</xsl:text> |
||||
</xsl:template> |
||||
|
||||
<!-- |
||||
| Processes the login-config definition and inserts the ExceptionTranslationFilter with |
||||
| the appropriate beans for either form or basic authentication. |
||||
--> |
||||
<xsl:template match="login-config"> |
||||
|
||||
<bean id="exceptionTranslationFilter" class="org.acegisecurity.ui.ExceptionTranslationFilter"> |
||||
<property name="authenticationEntryPoint"> |
||||
<xsl:choose> |
||||
<xsl:when test="$auth-method = 'FORM'"> |
||||
<ref local="authenticationProcessingFilterEntryPoint"/> |
||||
</xsl:when> |
||||
<xsl:when test="$auth-method = 'BASIC'"> |
||||
<ref local="basicProcessingFilterEntryPoint"/> |
||||
</xsl:when> |
||||
</xsl:choose> |
||||
</property> |
||||
</bean> |
||||
<xsl:text>

</xsl:text> |
||||
|
||||
<xsl:choose> |
||||
<xsl:when test="$auth-method = 'FORM'"> |
||||
<xsl:call-template name="form-login"/> |
||||
</xsl:when> |
||||
<xsl:when test="$auth-method = 'BASIC'"> |
||||
<bean id="basicProcessingFilter" class="org.acegisecurity.ui.basicauth.BasicProcessingFilter"> |
||||
<property name="authenticationManager"><ref local="authenticationManager"/></property> |
||||
<property name="authenticationEntryPoint"><ref local="basicProcessingFilterEntryPoint"/></property> |
||||
</bean> |
||||
<xsl:text>

</xsl:text> |
||||
|
||||
<bean id="basicProcessingFilterEntryPoint" class="org.acegisecurity.ui.basicauth.BasicProcessingFilterEntryPoint"> |
||||
<property name="realmName"><value>Your Realm</value></property> |
||||
</bean> |
||||
<xsl:text>

</xsl:text> |
||||
</xsl:when> |
||||
</xsl:choose> |
||||
|
||||
</xsl:template> |
||||
|
||||
<!-- |
||||
| Converts a form login configuration to an Acegi AuthenticationProcessingFilter and its entry point. |
||||
| The content of the form-login-page element is used for the loginFormUrl property of the entry point |
||||
| and the form-error-page is used for the authenticationFailureUrl property of the filter. |
||||
| |
||||
| The user must manually change the form Url to "j_acegi_security_check" in their login page. |
||||
--> |
||||
<xsl:template name="form-login"> |
||||
<xsl:comment>Make sure that these properties match your setup. In particular, remember to switch your login |
||||
form action from "j_security_check" to "j_acegi_security_check" |
||||
</xsl:comment> |
||||
<bean id="authenticationProcessingFilter" class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter"> |
||||
<property name="authenticationManager"><ref bean="authenticationManager"/></property> |
||||
<property name="authenticationFailureUrl"><value><xsl:value-of select="form-login-config/form-error-page"/></value></property> |
||||
<property name="defaultTargetUrl"><value>/</value></property> |
||||
<property name="filterProcessesUrl"><value>/j_acegi_security_check</value></property> |
||||
<property name="rememberMeServices"><ref local="rememberMeServices"/></property> |
||||
</bean> |
||||
<xsl:text>

</xsl:text> |
||||
|
||||
<bean id="authenticationProcessingFilterEntryPoint" class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint"> |
||||
<property name="loginFormUrl"><value><xsl:value-of select="form-login-config/form-login-page"/></value></property> |
||||
<property name="forceHttps"><value>false</value></property> |
||||
</bean> |
||||
<xsl:text>

</xsl:text> |
||||
</xsl:template> |
||||
|
||||
<!-- |
||||
| Outputs a standard filterToBeanProxy bean. |
||||
--> |
||||
<xsl:template name="filter-to-bean-proxy"> |
||||
<xsl:comment>======================== FILTER CHAIN =======================</xsl:comment> |
||||
|
||||
<xsl:comment>if you wish to use channel security, add "channelProcessingFilter," in front |
||||
of "httpSessionContextIntegrationFilter" in the list below</xsl:comment> |
||||
<bean id="filterChainProxy" class="org.acegisecurity.util.FilterChainProxy"> |
||||
<property name="filterInvocationDefinitionSource"> |
||||
<value> |
||||
CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON |
||||
PATTERN_TYPE_APACHE_ANT |
||||
<xsl:value-of select="$filter-list"/> |
||||
<xsl:text>
 </xsl:text> |
||||
</value> |
||||
</property> |
||||
</bean> |
||||
<xsl:text>

</xsl:text> |
||||
|
||||
</xsl:template> |
||||
|
||||
<xsl:template name="filter-invocation-interceptor"> |
||||
<bean id="httpRequestAccessDecisionManager" class="org.acegisecurity.vote.AffirmativeBased"> |
||||
<property name="messageSource"><ref local="messageSource"/></property> |
||||
<property name="allowIfAllAbstainDecisions"><value>false</value></property> |
||||
<property name="decisionVoters"> |
||||
<list> |
||||
<ref bean="roleVoter"/> |
||||
</list> |
||||
</property> |
||||
</bean> |
||||
<xsl:text>

</xsl:text> |
||||
<xsl:comment>An access decision voter that reads ROLE_* configuration settings</xsl:comment> |
||||
<bean id="roleVoter" class="org.acegisecurity.vote.RoleVoter"/> |
||||
<xsl:text>

</xsl:text> |
||||
|
||||
<xsl:comment> |
||||
Note the order that entries are placed against the objectDefinitionSource is critical. |
||||
The FilterSecurityInterceptor will work from the top of the list down to the FIRST pattern that matches the request URL. |
||||
Accordingly, you should place MOST SPECIFIC (ie a/b/c/d.*) expressions first, with LEAST SPECIFIC (ie a/.*) expressions last. |
||||
We also include ROLE_ANONYMOUS (the anonymous role) for web.xml role-names of "*". This is obviously different from the |
||||
original intention but there isn't a direct mapping to the acegi way of doing things. You should modify the permissions as required, |
||||
removing anonymous access where necessary. |
||||
</xsl:comment> |
||||
<bean id="filterInvocationInterceptor" class="org.acegisecurity.intercept.web.FilterSecurityInterceptor"> |
||||
<property name="messageSource"><ref local="messageSource"/></property> |
||||
<property name="authenticationManager"><ref bean="authenticationManager"/></property> |
||||
<property name="accessDecisionManager"><ref local="httpRequestAccessDecisionManager"/></property> |
||||
<property name="objectDefinitionSource"> |
||||
<value> |
||||
<xsl:text>
 CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON</xsl:text> |
||||
<xsl:text>
 PATTERN_TYPE_APACHE_ANT</xsl:text> |
||||
<xsl:apply-templates select="security-constraint"/> |
||||
<xsl:text>
 /*=ROLE_ANONYMOUS</xsl:text> <!-- by default allow anonymous access to top level urls --> |
||||
<xsl:text>
 </xsl:text> |
||||
</value> |
||||
</property> |
||||
</bean> |
||||
<xsl:text>

</xsl:text> |
||||
</xsl:template> |
||||
|
||||
<!-- |
||||
| Converts a security-constraint (a url-pattern and the associated role-name elements) |
||||
| to the form |
||||
| antUrlPattern=list of allowed roles |
||||
| Roles are converted to upper case and have the "ROLE_" prefix appended. |
||||
| |
||||
| In the case of role-name='*', signifying "any authenticated role", the complete list of roles |
||||
| defined in the web.xml file is used along with the anonymous role - so *unauthenticated* users can |
||||
| access the url. |
||||
| |
||||
| URLs which end in a wild card, will be converted to end in the recursive path version '**', |
||||
| e.g. /private/* becomes /private/** |
||||
--> |
||||
<xsl:template match="security-constraint"> |
||||
<xsl:variable name="url" select="web-resource-collection/url-pattern"/> |
||||
<xsl:text>
 </xsl:text> |
||||
<xsl:value-of select="$url"/> |
||||
<xsl:if test="substring($url, string-length($url)) = '*'">*</xsl:if> |
||||
<xsl:text>=</xsl:text> |
||||
<xsl:for-each select="./auth-constraint/role-name"> |
||||
<xsl:choose> |
||||
<xsl:when test="string() = '*'"> |
||||
<xsl:text>ROLE_ANONYMOUS,</xsl:text> |
||||
<xsl:value-of select="$all-roles"/> |
||||
</xsl:when> |
||||
<xsl:otherwise> |
||||
<xsl:text>ROLE_</xsl:text> |
||||
<xsl:value-of select="translate(string(), $lowercase, $uppercase)"/> |
||||
</xsl:otherwise> |
||||
</xsl:choose> |
||||
<xsl:if test="position() != last()">,</xsl:if> |
||||
</xsl:for-each> |
||||
</xsl:template> |
||||
|
||||
</xsl:stylesheet> |
||||
@ -1,56 +0,0 @@
@@ -1,56 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> |
||||
|
||||
<!-- |
||||
| Spring web setup for the acegifier. |
||||
| |
||||
| $Id$ |
||||
--> |
||||
|
||||
<beans> |
||||
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> |
||||
<property name="basename"><value>messages</value></property> |
||||
</bean> |
||||
|
||||
<bean id="conversionController" class="acegifier.web.AcegifierController"> |
||||
<property name="formView" value="acegificationForm" /> |
||||
<property name="commandClass" value="acegifier.web.AcegifierForm"/> |
||||
</bean> |
||||
|
||||
|
||||
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> |
||||
<property name="mappings"> |
||||
<props> |
||||
<prop key="/convert.htm">conversionController</prop> |
||||
</props> |
||||
</property> |
||||
</bean> |
||||
<!-- |
||||
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> |
||||
<property name="prefix"><value>/WEB-INF/jsp/</value></property> |
||||
<property name="suffix"><value>.jsp</value></property> |
||||
</bean> |
||||
--> |
||||
<bean |
||||
id="freemarkerConfig" |
||||
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> |
||||
<property name="templateLoaderPath"><value>/WEB-INF/freemarker/</value></property> |
||||
<property name="freemarkerVariables"> |
||||
<map> |
||||
<entry key="xml_escape"><ref local="fmXmlEscape"/></entry> |
||||
</map> |
||||
</property> |
||||
</bean> |
||||
|
||||
<bean id="fmXmlEscape" class="freemarker.template.utility.XmlEscape"/> |
||||
|
||||
<bean |
||||
id="viewResolver" |
||||
class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> |
||||
<property name="exposeSpringMacroHelpers"><value>true</value></property> |
||||
<property name="cache"><value>true</value></property> |
||||
<property name="prefix"><value></value></property> |
||||
<property name="suffix"><value>.ftl</value></property> |
||||
</bean> |
||||
|
||||
</beans> |
||||
@ -1,7 +0,0 @@
@@ -1,7 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> |
||||
|
||||
<beans> |
||||
|
||||
|
||||
</beans> |
||||
@ -1,20 +0,0 @@
@@ -1,20 +0,0 @@
|
||||
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
||||
|
||||
<#import "spring.ftl" as spring /> |
||||
|
||||
<html> |
||||
<head> |
||||
<title>Acegi Security Web.xml Converter</title> |
||||
</head> |
||||
<body> |
||||
<form method="POST"> |
||||
<@spring.bind "command.webXml" /> |
||||
<textarea name="webXml" rows="40" cols="80">${spring.status.value?default("Paste your web.xml here.")}</textarea> |
||||
<br /> |
||||
<@spring.showErrors "<br />"/> |
||||
<input type="submit" value="Convert"/> |
||||
</form> |
||||
|
||||
</body> |
||||
</html> |
||||
@ -1,39 +0,0 @@
@@ -1,39 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
||||
|
||||
<html> |
||||
<head> |
||||
<title>Acegi Security Web.xml Converter</title> |
||||
</head> |
||||
<body> |
||||
|
||||
<p>Congratulations! Your web.xml file has been "Acegified" successfully.</p> |
||||
|
||||
<h2>Web.xml</h2> |
||||
<p> |
||||
This is the converted web.xml file which you should use in your Acegi-Secured |
||||
Spring application. It should contain the mechanism for loading the Spring application |
||||
context file which defines your security configuration as well as the |
||||
necessary filters to apply this configuration. |
||||
</p> |
||||
|
||||
<pre> |
||||
${webXml?xml} |
||||
</pre> |
||||
|
||||
<h2>Acegi Security Beans</h2> |
||||
<p> |
||||
This is the file which defines your security configuration (a standard Spring |
||||
application context file). It should be named "applicationContext-acegi-security.xml" |
||||
and placed in your WEB-INF directory. |
||||
</p> |
||||
|
||||
<pre> |
||||
${acegiBeansXml?xml} |
||||
</pre> |
||||
|
||||
<p>Note that these files may require some manual changes before they work as expected and are |
||||
intended as a guide only :).</p> |
||||
|
||||
|
||||
</body> |
||||
</html> |
||||
@ -1,51 +0,0 @@
@@ -1,51 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
||||
<web-app version="2.4" |
||||
xmlns="http://java.sun.com/xml/ns/j2ee" |
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" > |
||||
<display-name>Acegifier Application</display-name> |
||||
|
||||
<context-param> |
||||
<param-name>contextConfigLocation</param-name> |
||||
<param-value> |
||||
/WEB-INF/applicationContext.xml |
||||
</param-value> |
||||
</context-param> |
||||
|
||||
<!-- |
||||
<context-param> |
||||
<param-name>log4jConfigLocation</param-name> |
||||
<param-value>/WEB-INF/classes/log4j.properties</param-value> |
||||
</context-param> |
||||
--> |
||||
|
||||
<welcome-file-list> |
||||
<welcome-file>/convert.htm</welcome-file> |
||||
</welcome-file-list> |
||||
|
||||
<listener> |
||||
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> |
||||
</listener> |
||||
|
||||
<listener> |
||||
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> |
||||
</listener> |
||||
<!-- |
||||
<listener> |
||||
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> |
||||
</listener> |
||||
--> |
||||
|
||||
<servlet> |
||||
<servlet-name>acegifier</servlet-name> |
||||
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> |
||||
<load-on-startup>1</load-on-startup> |
||||
</servlet> |
||||
|
||||
<servlet-mapping> |
||||
<servlet-name>acegifier</servlet-name> |
||||
<url-pattern>*.htm</url-pattern> |
||||
</servlet-mapping> |
||||
|
||||
</web-app> |
||||
@ -1,102 +0,0 @@
@@ -1,102 +0,0 @@
|
||||
/* Copyright 2004, 2005, 2006 Acegi Technology Pty Limited |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package acegifier; |
||||
|
||||
import java.io.ByteArrayOutputStream; |
||||
import java.io.IOException; |
||||
|
||||
import junit.framework.TestCase; |
||||
|
||||
import org.dom4j.Document; |
||||
import org.dom4j.io.OutputFormat; |
||||
import org.dom4j.io.XMLWriter; |
||||
|
||||
/** |
||||
* Tests the WebXmlConverter by applying it to a sample web.xml file. |
||||
* |
||||
* @author Luke Taylor |
||||
* @version $Id$ |
||||
*/ |
||||
public class WebXmlConverterTests extends TestCase { |
||||
|
||||
private static final String XML_TRANSFORMER = "javax.xml.transform.TransformerFactory"; |
||||
|
||||
public void testFileConversion() throws Exception { |
||||
/* |
||||
|
||||
THIS TEST HAS BEEN DISABLED AS IT BREAKS THE BUILD (see SEC-181 for details) |
||||
|
||||
WebXmlConverter converter; |
||||
try { |
||||
converter = new WebXmlConverter(); |
||||
} catch (Exception e) { |
||||
// TODO: Something went wrong, set transforer manually and retry...
|
||||
System.out.println("**** WARNING: NEEDING TO FALLBACK TO A MANUAL SYSTEM PROPERTY ****"); |
||||
System.setProperty(XML_TRANSFORMER, "com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl"); |
||||
System.out.println(XML_TRANSFORMER + ": " + System.getProperty(XML_TRANSFORMER)); |
||||
converter = new WebXmlConverter(); |
||||
} |
||||
|
||||
Resource r = new ClassPathResource("test-web.xml"); |
||||
converter.setInput(r.getInputStream()); |
||||
converter.doConversion(); |
||||
|
||||
DefaultListableBeanFactory bf = new DefaultListableBeanFactory(); |
||||
XmlBeanDefinitionReader beanReader = new XmlBeanDefinitionReader(bf); |
||||
|
||||
beanReader.loadBeanDefinitions( |
||||
new InMemoryResource(converter.getAcegiBeans().asXML().getBytes())); |
||||
assertNotNull(bf.getBean("filterChainProxy")); |
||||
|
||||
ProviderManager pm = (ProviderManager) bf.getBean("authenticationManager"); |
||||
assertNotNull(pm); |
||||
assertEquals(3, pm.getProviders().size()); |
||||
|
||||
DaoAuthenticationProvider dap = |
||||
(DaoAuthenticationProvider) bf.getBean("daoAuthenticationProvider"); |
||||
assertNotNull(dap); |
||||
|
||||
InMemoryDaoImpl dao = (InMemoryDaoImpl) dap.getUserDetailsService(); |
||||
UserDetails user = dao.loadUserByUsername("superuser"); |
||||
assertEquals("password",user.getPassword()); |
||||
assertEquals(2, user.getAuthorities().length); |
||||
assertNotNull(bf.getBean("anonymousProcessingFilter")); |
||||
assertNotNull(bf.getBean("anonymousAuthenticationProvider")); |
||||
assertNotNull(bf.getBean("httpSessionContextIntegrationFilter")); |
||||
assertNotNull(bf.getBean("rememberMeProcessingFilter")); |
||||
assertNotNull(bf.getBean("rememberMeAuthenticationProvider")); |
||||
|
||||
ExceptionTranslationFilter etf = |
||||
(ExceptionTranslationFilter) bf.getBean("exceptionTranslationFilter"); |
||||
assertNotNull(etf); |
||||
assertNotNull(etf.getAuthenticationEntryPoint()); |
||||
System.out.println(prettyPrint(converter.getNewWebXml())); |
||||
System.out.println(prettyPrint(converter.getAcegiBeans())); |
||||
*/ |
||||
} |
||||
|
||||
private String prettyPrint(Document document) throws IOException { |
||||
ByteArrayOutputStream output = new ByteArrayOutputStream(); |
||||
OutputFormat format = OutputFormat.createPrettyPrint(); |
||||
format.setNewlines(true); |
||||
format.setTrimText(false); |
||||
XMLWriter writer = new XMLWriter(output, format); |
||||
writer.write(document); |
||||
writer.flush(); |
||||
writer.close(); |
||||
return output.toString(); |
||||
} |
||||
} |
||||
@ -1,108 +0,0 @@
@@ -1,108 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> |
||||
|
||||
<web-app> |
||||
<display-name>Contacts Sample Application</display-name> |
||||
|
||||
<context-param> |
||||
<param-name>contextConfigLocation</param-name> |
||||
<param-value> |
||||
/WEB-INF/applicationContext-common-business.xml |
||||
/WEB-INF/applicationContext-common-authorization.xml |
||||
</param-value> |
||||
</context-param> |
||||
|
||||
<context-param> |
||||
<param-name>log4jConfigLocation</param-name> |
||||
<param-value>/WEB-INF/classes/log4j.properties</param-value> |
||||
</context-param> |
||||
|
||||
<servlet> |
||||
<servlet-name>contacts</servlet-name> |
||||
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> |
||||
<load-on-startup>1</load-on-startup> |
||||
</servlet> |
||||
|
||||
<listener> |
||||
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> |
||||
</listener> |
||||
|
||||
<listener> |
||||
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> |
||||
</listener> |
||||
<!-- |
||||
The HttpSessionEventPublisher will publish |
||||
HttpSessionCreatedEvent and HttpSessionDestroyedEvent |
||||
to the WebApplicationContext |
||||
--> |
||||
<listener> |
||||
<listener-class>org.acegisecurity.ui.session.HttpSessionEventPublisher</listener-class> |
||||
</listener> |
||||
<!-- |
||||
- Provides web services endpoint. See remoting-servlet.xml. |
||||
--> |
||||
<servlet> |
||||
<servlet-name>remoting</servlet-name> |
||||
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> |
||||
<load-on-startup>2</load-on-startup> |
||||
</servlet> |
||||
|
||||
<servlet-mapping> |
||||
<servlet-name>contacts</servlet-name> |
||||
<url-pattern>*.htm</url-pattern> |
||||
</servlet-mapping> |
||||
|
||||
<servlet-mapping> |
||||
<servlet-name>remoting</servlet-name> |
||||
<url-pattern>/remoting/*</url-pattern> |
||||
</servlet-mapping> |
||||
|
||||
<welcome-file-list> |
||||
<welcome-file>index.jsp</welcome-file> |
||||
</welcome-file-list> |
||||
|
||||
<security-constraint> |
||||
<web-resource-collection> |
||||
<url-pattern>/index.jsp</url-pattern> |
||||
</web-resource-collection> |
||||
<auth-constraint> |
||||
<role-name>*</role-name> |
||||
</auth-constraint> |
||||
</security-constraint> |
||||
|
||||
<security-constraint> |
||||
<web-resource-collection> |
||||
<url-pattern>/hello.htm</url-pattern> |
||||
</web-resource-collection> |
||||
<auth-constraint> |
||||
<role-name>*</role-name> |
||||
</auth-constraint> |
||||
</security-constraint> |
||||
|
||||
<security-constraint> |
||||
<web-resource-collection> |
||||
<url-pattern>/logoff.jsp</url-pattern> |
||||
</web-resource-collection> |
||||
<auth-constraint> |
||||
<role-name>*</role-name> |
||||
</auth-constraint> |
||||
</security-constraint> |
||||
|
||||
<login-config> |
||||
<auth-method>form</auth-method> |
||||
<form-login-config> |
||||
<form-login-page>/acegilogin.jsp</form-login-page> |
||||
<form-error-page>/acegilogin.jsp?login_error=1</form-error-page> |
||||
</form-login-config> |
||||
|
||||
</login-config> |
||||
|
||||
<security-role> |
||||
<role-name>user</role-name> |
||||
</security-role> |
||||
|
||||
<security-role> |
||||
<role-name>dummy</role-name> |
||||
</security-role> |
||||
|
||||
</web-app> |
||||
Loading…
Reference in new issue