package se.sperber.cryson.examples.advancedcrysondiary.security;
import org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.*;
@Component
public class StaticAuthenticationProvider implements AuthenticationProvider {
private Map<String, String> users;
@PostConstruct
public void setupUsers() {
users = new HashMap<String, String>();
users.put("jack", "password");
users.put("jill", "password");
users.put("lurker", "password");
}
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
if (users.containsKey(authentication.getPrincipal()) && users.get(authentication.getPrincipal()).equals(authentication.getCredentials())) {
List<SimpleGrantedAuthority> grantedAuthorities = new ArrayList<SimpleGrantedAuthority>();
grantedAuthorities.add(new SimpleGrantedAuthority("ROLE_USER"));
if (authentication.getPrincipal().equals("lurker")) {
grantedAuthorities.add(new SimpleGrantedAuthority("ROLE_LURKER"));
}
return new UsernamePasswordAuthenticationToken(authentication.getPrincipal(), authentication.getCredentials(), grantedAuthorities);
} else {
throw new BadCredentialsException("Authentication failed");
}
}
public boolean supports(Class<?> authentication) {
return UsernamePasswordAuthenticationToken.class.isAssignableFrom(authentication);
}
}