在 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 格式即可。- @Override
- public Collectionextends GrantedAuthority> getAuthorities() {
- return mapToGrantedAuthorities(getRoles());
- }
- private static List
authorities ) { - return authorities.stream()
- .map(Authority -> new SimpleGrantedAuthority("ROLE_" + Authority.getName()))
- .collect(Collectors.toList());
- }
至於
isAccountNonExpired()
, isCredentialsNonExpired()
, isEnabled()
則可以使用 active_date & inactive_date 來作判斷即可。繼續閱讀: Spring Boot 身份認證 (Authentication) 使用資料庫 (Database)
沒有留言:
張貼留言