added getByUsername to userinfo repositories and supporting classes, updated calling classes to use this

fixed namedquery
pull/210/head
Justin Richer 2012-08-23 15:19:50 -04:00
parent ba24ca1f60
commit b5ce8d5e8b
4 changed files with 34 additions and 19 deletions

View File

@ -32,7 +32,8 @@ import com.google.gson.JsonObject;
@Entity
@Table(name="user_info")
@NamedQueries({
@NamedQuery(name="DefaultUserInfo.getAll", query = "select u from DefaultUserInfo u")
@NamedQuery(name="DefaultUserInfo.getAll", query = "select u from DefaultUserInfo u"),
@NamedQuery(name="DefaultUserInfo.getByUsername", query = "select u from DefaultUserInfo u WHERE u.preferredUsername = :username")
})
public class DefaultUserInfo implements UserInfo {

View File

@ -66,6 +66,13 @@ public interface UserInfoRepository {
*
* @return the UserInfo collection, or null
*/
public Collection<? extends UserInfo> getAll();
public Collection<? extends UserInfo> getAll();
/**
* Get a UserInfo object by its preferred_username field
* @param username
* @return
*/
public UserInfo getByUsername(String username);
}

View File

@ -16,6 +16,7 @@
package org.mitre.openid.connect.repository.impl;
import static org.mitre.util.jpa.JpaUtil.saveOrUpdate;
import static org.mitre.util.jpa.JpaUtil.getSingleResult;
import java.util.Collection;
@ -82,10 +83,21 @@ public class JpaUserInfoRepository implements UserInfoRepository {
@Transactional
public Collection<DefaultUserInfo> getAll() {
TypedQuery<DefaultUserInfo> query = manager.createNamedQuery(
"DefaultUserInfo.getAll", DefaultUserInfo.class);
TypedQuery<DefaultUserInfo> query = manager.createNamedQuery("DefaultUserInfo.getAll", DefaultUserInfo.class);
return query.getResultList();
}
/**
* Get a single UserInfo object by its username
*/
@Override
public UserInfo getByUsername(String username) {
TypedQuery<DefaultUserInfo> query = manager.createNamedQuery("DefaultUserInfo.getByUsername", DefaultUserInfo.class);
query.setParameter("username", username);
return getSingleResult(query.getResultList());
}
}

View File

@ -16,6 +16,12 @@ import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
/**
* A UserDetailsService backed by a UserInfoRepository.
*
* @author jricher
*
*/
@Service("userInfoUserDetailsService")
public class UserInfoUserDetailsService implements UserDetailsService {
@ -28,25 +34,14 @@ public class UserInfoUserDetailsService implements UserDetailsService {
private List<String> admins = new ArrayList<String>();
@Override
public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException {
UserInfo userInfo = repository.getByUserId(username);
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
UserInfo userInfo = repository.getByUsername(username);
if (userInfo != null) {
// TODO: make passwords configurable? part of object?
String password = "password";
boolean enabled = true;
/*
* TODO: this was for a MITRE-specific flag
if(userInfo.getDeleteFlag() > 0){
enabled = false;
}
*/
boolean accountNonExpired = true;
boolean credentialsNonExpired = true;
boolean accountNonLocked = true;
List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
authorities.add(ROLE_USER);
@ -55,10 +50,10 @@ public class UserInfoUserDetailsService implements UserDetailsService {
}
// TODO: this should really be our own UserDetails wrapper class, shouldn't it?
User user = new User(userInfo.getPreferredUsername(), password, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities);
User user = new User(userInfo.getUserId(), password, authorities);
return user;
} else {
return null;
throw new UsernameNotFoundException("Could not find username: " + username);
}
}