package org.springcamp.security.facebook; import java.util.Collection; import java.util.HashSet; import org.springframework.security.authentication.AuthenticationProvider; import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.util.Assert; public class FacebookAuthenticationProvider implements AuthenticationProvider { private FacebookService facebookService; private String facebookRole = "ROLE_FACEBOOK"; public void setFacebookService(FacebookService facebookService) { this.facebookService = facebookService; } public void setFacebookRole(String facebookRole) { this.facebookRole = facebookRole; } @Override public Authentication authenticate(Authentication authentication) throws AuthenticationException { Assert.isInstanceOf(FacebookAuthenticationToken.class, authentication, "Only FacebookAuthenticationProvider is supported"); Collection<GrantedAuthority> authorities = generateAuthorities(); FacebookUser facebookUser = facebookService.findUser(); FacebookAuthenticationToken token = new FacebookAuthenticationToken(facebookUser.getName(), null, authorities); token.setDetails(facebookUser); return token; } protected Collection<GrantedAuthority> generateAuthorities() { Collection<GrantedAuthority> authorities = new HashSet<GrantedAuthority>(); authorities.add(new SimpleGrantedAuthority(facebookRole)); return authorities; } @Override public boolean supports(Class<?> authentication) { return (FacebookAuthenticationToken.class.isAssignableFrom(authentication)); } }