View Javadoc

1   package org.springframework.security.config;
2   
3   import org.springframework.util.StringUtils;
4   import org.springframework.beans.factory.support.BeanDefinitionBuilder;
5   import org.springframework.beans.factory.xml.ParserContext;
6   
7   import org.w3c.dom.Element;
8   
9   /**
10   * @author Luke Taylor
11   * @version $Id: JdbcUserServiceBeanDefinitionParser.java 3188 2008-07-15 16:43:57Z luke_t $
12   */
13  public class JdbcUserServiceBeanDefinitionParser extends AbstractUserDetailsServiceBeanDefinitionParser {
14      static final String ATT_DATA_SOURCE = "data-source-ref";
15      static final String ATT_USERS_BY_USERNAME_QUERY = "users-by-username-query";
16      static final String ATT_AUTHORITIES_BY_USERNAME_QUERY = "authorities-by-username-query";
17      static final String ATT_GROUP_AUTHORITIES_QUERY = "group-authorities-by-username-query";
18      static final String ATT_ROLE_PREFIX = "role-prefix";
19  
20      protected String getBeanClassName(Element element) {
21          return "org.springframework.security.userdetails.jdbc.JdbcUserDetailsManager";
22      }
23  
24      protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) {
25          String dataSource = element.getAttribute(ATT_DATA_SOURCE);
26  
27          if (dataSource != null) {
28              builder.addPropertyReference("dataSource", dataSource);
29          } else {
30              parserContext.getReaderContext().error(ATT_DATA_SOURCE  + " is required for "
31                      + Elements.JDBC_USER_SERVICE, parserContext.extractSource(element));
32          }
33          
34          String usersQuery = element.getAttribute(ATT_USERS_BY_USERNAME_QUERY);
35          String authoritiesQuery = element.getAttribute(ATT_AUTHORITIES_BY_USERNAME_QUERY);
36          String groupAuthoritiesQuery = element.getAttribute(ATT_GROUP_AUTHORITIES_QUERY);
37          String rolePrefix = element.getAttribute(ATT_ROLE_PREFIX);
38          
39          if (StringUtils.hasText(rolePrefix)) {
40              builder.addPropertyValue("rolePrefix", rolePrefix);
41          }
42          
43          if (StringUtils.hasText(usersQuery)) {
44              builder.addPropertyValue("usersByUsernameQuery", usersQuery);
45          }
46          
47          if (StringUtils.hasText(authoritiesQuery)) {
48              builder.addPropertyValue("authoritiesByUsernameQuery", authoritiesQuery);
49          }
50          
51          if (StringUtils.hasText(groupAuthoritiesQuery)) {
52              builder.addPropertyValue("enableGroups", Boolean.TRUE);
53              builder.addPropertyValue("groupAuthoritiesByUsernameQuery", groupAuthoritiesQuery);
54          }
55      }
56  }