23 Mayıs 2018 Çarşamba

SpringSecurity User Sınıfı - Bir Kullanıcıyı Temsil Eder

Giriş
Şu satırı dahil ederiz.
import org.springframework.security.core.userdetails.User;
UserDetails arayüzünden kalıtır.

Bu sınıfın içindeki bazı alanlar kafa karıştırıcı

enabled Alanı
Açıklaması şöyle
Disabled indicates an account has been administratively or automatically disabled for some reason. Usually some action is required to release it.
accountNonLocked Alanı
Açıklaması şöyle. Örneğin 3 defa yanlış şifre girilmesi sonucu hesap kilitlenir
Locked indicates an account has been automatically suspended due to invalid login attempts. Usually the passage of time or (less often) requesting manual unlocking is required to release it.
accountNonExpired Alanı
Örneğin hesap belli bir süre kullanılmazsa bu alana değer atanır

credentialsNonExpired Alanı
Örneğin şifreyi belli bir sürede bir değiştirmek gerekir.

enabled vs accountNonLocked Farkı
Açıklaması şöyle. Yanlış şifre girilmesi sonucu hesap kilitlenir
The distinction is not used by Acegi Security code aside from providing more informative errors to the user. There is also an order in which different exceptions should be returned, so that a disabled or locked account for instance will not return a bad credentials exception. Refer to the JavaDocs for more details.

constructor - username + password + authorities
Authority yani rol olarak GrantedAuthority, SimpleGrantedAuthority kullanılabilir.

Örnek
Şöyle yaparız.
public class DomainUserDetailsService implements UserDetailsService {

  private final UserRepository userRepository;

  @Override
  public UserDetails loadUserByUsername(final String login) {
    String lowercaseLogin = ...;
    List<GrantedAuthority> grantedAuthorities =...;
    return new org.springframework.security.core.userdetails.User(lowercaseLogin,
      password,
      grantedAuthorities);
    ).orElseThrow(() -> new UsernameNotFoundException("...));
  }
}
Örnek
Şöyle yaparız
@Service
public class UserDetailsServiceImpl implements UserDetailsService {
  private UserRepository userRepository;


  @Override
  public UserDetails loadUserByUsername(String username)
  throws UsernameNotFoundException {
    com.project.techupdate.entity.User user = userRepository.findByUsername(username);
    if (user == null) {
      throw new UsernameNotFoundException(username);
    }

    Set<Role> roles = user.getRole();
    List<SimpleGrantedAuthority> authorities = new ArrayList<>();
    for(Role role: roles){
      authorities.add(new SimpleGrantedAuthority(role.getName()));
    }

    return new User(user.getUsername(), user.getPassword(), authorities);
  }
}
build metodu
Şöyle yaparız.
UserDetails springU = org.springframework.security.core.userdetails.User
  .withUsername(...)
  .password(...)
  .authorities("USER", "write")
  .build();
getUserName metodu
Şöyle yaparız.
User activeUser = ...;
String username = activeUser.getUsername();
withDefaultPasswordEncoder metodu
org.springframework.security.crypto.password.PasswordEncoder arayüzünü gerçekleştiren bir nesne döner.

Hiç yorum yok:

Yorum Gönder