簡體   English   中英

JWT 使用 Spring 引導進行身份驗證 不使用 userDetail

[英]JWT Authentication with Spring boot Withot using userDetail

我正在為移動應用程序實現 rest API,並希望在其中使用 JWT 令牌。 我通過使用 userDetials object 實現了這一點。現在我的問題是我在數據庫中沒有用戶表我只有電話號碼和 UUID。 我們可以通過更改簽名以使用電話號碼作為簽名來實現這一點。 但我的問題是我將如何驗證每個請求? 以及如何使用我自己的不包含用戶名和密碼的 object 驗證令牌。 根據我的實施,我將必須使用 spring 安全性以及何時使用 spring 安全性。 Spring 安全將需要 UserDetail 服務,該服務將返回給我 spring 用戶 object。任何幫助將不勝感激。

您可以通過實現用戶詳細信息來覆蓋它,這里是通過用戶名和域進行身份驗證的示例

public class SimpleUserDetailsService implements UserDetailsService {

    // ...

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        String usernameAndDomain = StringUtils.split(
          username, String.valueOf(Character.LINE_SEPARATOR));//split as much as you want
        if (usernameAndDomain == null || usernameAndDomain.length != 2) {
            throw new UsernameNotFoundException("Username and domain must be provided");
        }
        User user = userRepository.findUser(usernameAndDomain[0], usernameAndDomain[1]);
        if (user == null) {
            throw new UsernameNotFoundException(
              String.format("Username not found for domain, username=%s, domain=%s", 
                usernameAndDomain[0], usernameAndDomain[1]));
        }
        return user;
    }
}

根據我的評論,您應該創建一個自定義用戶詳細信息服務。 SimpleUserDetailsService class 的 loadUserByUsername() 方法應該返回您的自定義用戶詳細信息。

實體

public class Pojo {
    private String phoneNumber;
    private String uuid;

    // Getters Setters Constructors
}

自定義用戶詳細信息

public class CustomUserDetails implements UserDetails {
    private String username;
    private String password;
    private List<GrantedAuthority> authorities;

    public CustomUserDetails(Pojo pojo) {
        this.username = pojo.getPhoneNumber();
        this.password = pojo.getUuid();

        authorities = new ArrayList<>();
    }

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return authorityList;
    }

    @Override
    public String getPassword() {
        return password;
    }

    @Override
    public String getUsername() {
        return username;
    }

    @Override
    public boolean isAccountNonExpired() {
        return true;
    }

    @Override
    public boolean isAccountNonLocked() {
        return true;
    }

    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }

    @Override
    public boolean isEnabled() {
      return true;
    }

}

用戶詳情服務實現

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM