Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package st.malike.auth.server.service.security; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.ComponentScan; import org.springframework.security.authentication.AuthenticationProvider; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Component; import st.malike.auth.server.model.User; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; /** * * @author malike_st */ @Component @ComponentScan(basePackages = { "org.springframework.security.crypto.password" }) public class UserAuthProviderService implements AuthenticationProvider { @Autowired private UserAuthConfigService authConfigService; private final BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); private Authentication signInUser(User user, List<GrantedAuthority> roles) { UserDetails springSecurityUser = new org.springframework.security.core.userdetails.User(user.getEmail(), user.getId(), roles); Authentication authentication = new UsernamePasswordAuthenticationToken(springSecurityUser, user.getId(), roles); SecurityContextHolder.getContext().setAuthentication(authentication); return authentication; } @Override public Authentication authenticate(Authentication a) throws AuthenticationException { String email = a.getName(); String password = a.getCredentials().toString(); User user = authConfigService.getUser(email); if (null != user) { if (passwordEncoder.matches(password, user.getPassword())) { List<GrantedAuthority> roleAuthority = authConfigService.getRights(user); return signInUser(user, roleAuthority); } throw new AuthenticationException("Password for '" + email + "' not correct.") { }; } throw new AuthenticationException("Could not find user with name '" + email + "'") { }; } @Override public boolean supports(Class<?> type) { return type.equals(UsernamePasswordAuthenticationToken.class); } }