1 package org.springframework.security.config;
2
3 import org.springframework.beans.factory.config.BeanDefinition;
4 import org.springframework.beans.factory.config.RuntimeBeanReference;
5 import org.springframework.beans.factory.parsing.BeanComponentDefinition;
6 import org.springframework.beans.factory.support.BeanDefinitionBuilder;
7 import org.springframework.beans.factory.support.RootBeanDefinition;
8 import org.springframework.beans.factory.xml.BeanDefinitionParser;
9 import org.springframework.beans.factory.xml.ParserContext;
10 import org.springframework.security.ui.basicauth.BasicProcessingFilter;
11 import org.springframework.security.ui.basicauth.BasicProcessingFilterEntryPoint;
12 import org.w3c.dom.Element;
13
14
15
16
17
18
19
20
21
22 public class BasicAuthenticationBeanDefinitionParser implements BeanDefinitionParser {
23 private String realmName;
24
25 public BasicAuthenticationBeanDefinitionParser(String realmName) {
26 this.realmName = realmName;
27 }
28
29 public BeanDefinition parse(Element elt, ParserContext parserContext) {
30 BeanDefinitionBuilder filterBuilder = BeanDefinitionBuilder.rootBeanDefinition(BasicProcessingFilter.class);
31 RootBeanDefinition entryPoint = new RootBeanDefinition(BasicProcessingFilterEntryPoint.class);
32 entryPoint.setSource(parserContext.extractSource(elt));
33 entryPoint.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
34
35 entryPoint.getPropertyValues().addPropertyValue("realmName", realmName);
36
37 parserContext.getRegistry().registerBeanDefinition(BeanIds.BASIC_AUTHENTICATION_ENTRY_POINT, entryPoint);
38
39 filterBuilder.addPropertyValue("authenticationManager", new RuntimeBeanReference(BeanIds.AUTHENTICATION_MANAGER));
40 filterBuilder.addPropertyValue("authenticationEntryPoint", new RuntimeBeanReference(BeanIds.BASIC_AUTHENTICATION_ENTRY_POINT));
41
42 parserContext.getRegistry().registerBeanDefinition(BeanIds.BASIC_AUTHENTICATION_FILTER,
43 filterBuilder.getBeanDefinition());
44 ConfigUtils.addHttpFilter(parserContext, new RuntimeBeanReference(BeanIds.BASIC_AUTHENTICATION_FILTER));
45 parserContext.registerComponent(new BeanComponentDefinition(filterBuilder.getBeanDefinition(),
46 BeanIds.BASIC_AUTHENTICATION_FILTER));
47 return null;
48 }
49 }