content: package com.genersoft.iot.vmp.conf.security.dto;
  
  import com.genersoft.iot.vmp.storager.dao.dto.Role;
  import com.genersoft.iot.vmp.storager.dao.dto.User;
  import lombok.Getter;
  import lombok.Setter;
  import org.springframework.security.core.CredentialsContainer;
  import org.springframework.security.core.GrantedAuthority;
  import org.springframework.security.core.SpringSecurityCoreVersion;
  import org.springframework.security.core.userdetails.UserDetails;
  
  import java.time.LocalDateTime;
  import java.util.Collection;
  
  public class LoginUser implements UserDetails, CredentialsContainer {
  
      private static final long serialVersionUID = SpringSecurityCoreVersion.SERIAL_VERSION_UID;
  
      /**
       * 用户
       */
      private User user;
  
      @Getter
      @Setter
      private String accessToken;
  
      @Setter
      @Getter
      private String serverId;
  
      /**
       * 登录时间
       */
      private LocalDateTime loginTime;
  
      public LoginUser(User user, LocalDateTime loginTime) {
          this.user = user;
          this.loginTime = loginTime;
      }
  
  
      @Override
      public Collection<? extends GrantedAuthority> getAuthorities() {
          return null;
      }
  
      @Override
      public String getPassword() {
          return user.getPassword();
      }
  
      @Override
      public String getUsername() {
          return user.getUsername();
      }
  
      /**
       * 账户是否未过期，过期无法验证
       */
      @Override
      public boolean isAccountNonExpired() {
          return true;
      }
  
      /**
       * 指定用户是否解锁，锁定的用户无法进行身份验证
       * <p>
       * 密码锁定
       * </p>
       */
      @Override
      public boolean isAccountNonLocked() {
          return true;
      }
  
      /**
       * 指示是否已过期的用户的凭据(密码)，过期的凭据防止认证
       */
      @Override
      public boolean isCredentialsNonExpired() {
          return true;
      }
  
      /**
       * 用户是否被启用或禁用。禁用的用户无法进行身份验证。
       */
      @Override
      public boolean isEnabled() {
          return true;
      }
  
      /**
       * 认证完成后，擦除密码
       */
      @Override
      public void eraseCredentials() {
          user.setPassword(null);
      }
  
  
      public int getId() {
          return user.getId();
      }
  
      public Role getRole() {
          return user.getRole();
      }
  
      public String getPushKey() {
          return user.getPushKey();
      }
  
  }
  