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
11
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 }