1 /* Copyright 2004, 2005, 2006 Acegi Technology Pty Limited 2 * 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 package org.springframework.security.userdetails.memory; 17 18 import java.util.HashMap; 19 import java.util.Map; 20 21 import org.springframework.security.userdetails.UserDetails; 22 import org.springframework.security.userdetails.UsernameNotFoundException; 23 import org.apache.commons.logging.Log; 24 import org.apache.commons.logging.LogFactory; 25 import org.springframework.util.Assert; 26 27 28 /** 29 * Used by {@link InMemoryDaoImpl} to store a list of users and their corresponding granted authorities. 30 * 31 * @author Ben Alex 32 * @version $Id: UserMap.java 2729 2008-03-13 16:49:19Z luke_t $ 33 */ 34 public class UserMap { 35 //~ Static fields/initializers ===================================================================================== 36 37 private static final Log logger = LogFactory.getLog(UserMap.class); 38 39 //~ Instance fields ================================================================================================ 40 41 private Map userMap = new HashMap(); 42 43 //~ Methods ======================================================================================================== 44 45 /** 46 * Adds a user to the in-memory map. 47 * 48 * @param user the user to be stored 49 * 50 * @throws IllegalArgumentException if a null User was passed 51 */ 52 public void addUser(UserDetails user) throws IllegalArgumentException { 53 Assert.notNull(user, "Must be a valid User"); 54 55 logger.info("Adding user [" + user + "]"); 56 this.userMap.put(user.getUsername().toLowerCase(), user); 57 } 58 59 /** 60 * Locates the specified user by performing a case insensitive search by username. 61 * 62 * @param username to find 63 * 64 * @return the located user 65 * 66 * @throws UsernameNotFoundException if the user could not be found 67 */ 68 public UserDetails getUser(String username) throws UsernameNotFoundException { 69 UserDetails result = (UserDetails) this.userMap.get(username.toLowerCase()); 70 71 if (result == null) { 72 throw new UsernameNotFoundException("Could not find user: " + username, username); 73 } 74 75 return result; 76 } 77 78 /** 79 * Indicates the size of the user map. 80 * 81 * @return the number of users in the map 82 */ 83 public int getUserCount() { 84 return this.userMap.size(); 85 } 86 87 /** 88 * Set the users in this {@link UserMap}. Overrides previously added users. 89 * 90 * @param users {@link Map} <{@link String}, {@link UserDetails}> with pairs (username, userdetails) 91 * @since 1.1 92 */ 93 public void setUsers(Map users) { 94 this.userMap = users; 95 } 96 }