1 package org.springframework.security.config;
2
3 import org.springframework.security.util.PortMapperImpl;
4 import org.springframework.beans.factory.xml.BeanDefinitionParser;
5 import org.springframework.beans.factory.xml.ParserContext;
6 import org.springframework.beans.factory.config.BeanDefinition;
7 import org.springframework.beans.factory.support.RootBeanDefinition;
8 import org.springframework.util.StringUtils;
9 import org.springframework.util.xml.DomUtils;
10
11 import org.w3c.dom.Element;
12
13 import java.util.List;
14 import java.util.Iterator;
15 import java.util.Map;
16 import java.util.HashMap;
17
18
19
20
21
22
23
24
25 public class PortMappingsBeanDefinitionParser implements BeanDefinitionParser {
26 public static final String ATT_HTTP_PORT = "http";
27 public static final String ATT_HTTPS_PORT = "https";
28
29 public BeanDefinition parse(Element element, ParserContext parserContext) {
30 RootBeanDefinition portMapper = new RootBeanDefinition(PortMapperImpl.class);
31 portMapper.setSource(parserContext.extractSource(element));
32
33 if (element != null) {
34 List mappingElts = DomUtils.getChildElementsByTagName(element, Elements.PORT_MAPPING);
35 if(mappingElts.isEmpty()) {
36 parserContext.getReaderContext().error("No port-mapping child elements specified", element);
37 }
38
39 Map mappings = new HashMap();
40
41 Iterator iterator = mappingElts.iterator();
42 while (iterator.hasNext()) {
43 Element elt = (Element) iterator.next();
44 String httpPort = elt.getAttribute(ATT_HTTP_PORT);
45 String httpsPort = elt.getAttribute(ATT_HTTPS_PORT);
46
47 if (!StringUtils.hasText(httpPort)) {
48 parserContext.getReaderContext().error("No http port supplied in port mapping", elt);
49 }
50
51 if (!StringUtils.hasText(httpsPort)) {
52 parserContext.getReaderContext().error("No https port supplied in port mapping", elt);
53 }
54
55 mappings.put(httpPort, httpsPort);
56 }
57
58 portMapper.getPropertyValues().addPropertyValue("portMappings", mappings);
59 }
60
61 return portMapper;
62 }
63 }