繁体   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