Home

2020年1月1日 星期三

Spring Boot 身份認證 (Authentication) 使用資料庫 (Database)

From: Polin Wei

在 Spring Boot 客製化 登入 ( Login ) 與 認證 (Authenticate) 機制中我們使用固定的帳號來作身份認證 (authentication),但在實務上這並不實用,因為不可能增加或減少帳號,就來修改程式,最好的方法就是將帳號維護於資料庫 (Database) 內,這樣就可以方便管理者作日常維護了。

這裡要實作 org.springframework.security.core.userdetails.UserDetails ,其中主要的重點是透過  public Collection getAuthorities() 提供 Authorities,在 JPA (Java Persistence API) Many-To-Many Relationship 在 Model 上的設置 已經取得帳號所有的 Authority,再利用 mapToGrantedAuthorities(Set authorities) 轉換成 Spring Security 需要的 Authorities 格式即可

  1. @Override
  2. public Collectionextends GrantedAuthority> getAuthorities() {
  3. return mapToGrantedAuthorities(getRoles());
  4. }
  5. private static List mapToGrantedAuthorities(Set authorities) {
  6. return authorities.stream()
  7. .map(Authority -> new SimpleGrantedAuthority("ROLE_" + Authority.getName()))
  8. .collect(Collectors.toList());
  9. }
至於 isAccountNonExpired()isCredentialsNonExpired()isEnabled() 則可以使用 active_date & inactive_date 來作判斷即可。


繼續閱讀:  Spring Boot 身份認證 (Authentication) 使用資料庫 (Database) 

沒有留言:

張貼留言