package net.petrikainulainen.spring.datasolr.user.controller; import net.petrikainulainen.spring.datasolr.security.util.SecurityContextUtil; import net.petrikainulainen.spring.datasolr.user.dto.SecurityRole; import net.petrikainulainen.spring.datasolr.user.dto.UserDTO; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import javax.annotation.Resource; import java.util.Collection; import java.util.Iterator; /** * @author Petri Kainulainen */ @Controller public class UserController { private static final Logger LOGGER = LoggerFactory.getLogger(UserController.class); @Resource private SecurityContextUtil securityContextUtil; @RequestMapping(value = "/api/user", method = RequestMethod.GET) @ResponseBody public UserDTO getLoggedInUser() { LOGGER.debug("Getting logged in user."); UserDetails principal = securityContextUtil.getPrincipal(); return createDTO(principal); } private UserDTO createDTO(UserDetails principal) { UserDTO dto = null; if (principal != null) { String username = principal.getUsername(); SecurityRole role = getRole(principal.getAuthorities()); dto = new UserDTO(username, role); } LOGGER.debug("Created user dto: {}", dto); return dto; } private SecurityRole getRole(Collection<? extends GrantedAuthority> authorities) { LOGGER.debug("Getting role from authorities: {}", authorities); Iterator<? extends GrantedAuthority> authority = authorities.iterator(); GrantedAuthority a = authority.next(); return SecurityRole.valueOf(a.getAuthority()); } }