JWT认证与Spring引导不使用userDetail



我正在为移动应用程序实现rest api,并希望在其中使用JWT令牌。我通过使用userdetails对象实现了这一点。现在的问题是,数据库中没有Users表,只有电话号码和UUID。我们可以通过将签名更改为使用电话号码作为签名来实现这一点。但我的问题是如何验证每个请求?以及如何使用我自己的不包含用户名和密码的对象验证令牌。根据我的实现,我将不得不看到弹簧安全性,当我将使用弹簧安全性。Spring安全将需要UserDetail服务,这将给我回Spring用户对象。如有任何帮助,不胜感激。

您可以通过实现用户详细信息来覆盖它下面是一个通过用户名和域

进行身份验证的示例
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类的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;
}
}

User details service impl

最新更新