Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.ClassCastException:class org.springframework.security.core.userdetails.User不能强制转换为类_Java_Spring_Spring Boot_Spring Mvc_Spring Security - Fatal编程技术网

java.lang.ClassCastException:class org.springframework.security.core.userdetails.User不能强制转换为类

java.lang.ClassCastException:class org.springframework.security.core.userdetails.User不能强制转换为类,java,spring,spring-boot,spring-mvc,spring-security,Java,Spring,Spring Boot,Spring Mvc,Spring Security,我的spring boot应用程序有问题。我正在发送获取密钥的请求,但出现错误 java.lang.ClassCastException: class org.springframework.security.core.userdetails.User cannot be cast to class com.spring.springBlogProject.model.User (org.springframework.security.core.userdetails.User and co

我的spring boot应用程序有问题。我正在发送获取密钥的请求,但出现错误


java.lang.ClassCastException: class org.springframework.security.core.userdetails.User cannot be cast to class com.spring.springBlogProject.model.User (org.springframework.security.core.userdetails.User and com.spring.springBlogProject.model.User are in unnamed module of loader 'app')
    at com.spring.springBlogProject.security.JwtProvider.generateToken(JwtProvider.java:28) ~[classes/:na]
我不明白问题是什么,我第一次使用spring。我发现接收到的数据不能简化为我创建的类。有什么问题吗?下面是我的课程,我使用的是SpringBootV2.3.1.0版本

谢谢你的帮助

public class UserDetailsServiceImpl implements UserDetailsService {

    @Autowired
    private UserRepository userRepository;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
       User user = userRepository.findByUsername(username).orElseThrow(()->
                new UsernameNotFoundException("No user found with " + username));

        return new org.springframework.security.core.userdetails.User(user.getUsername(),
                user.getPassword(),
                true,true,true,true,
                getAuthorities("ROLE_USER"));
    }

    private Collection<? extends GrantedAuthority> getAuthorities(String role_user) {
        return Collections.singletonList(new SimpleGrantedAuthority(role_user));
    }
}

您必须按照以下方式在UserDetails中转换它

public class JwtUser implements UserDetails {

    private final long id;
    private final String email;
    private final String phoneNo;
    private final String username;
    private final String password;
    private final boolean enabled;
    private final Collection<? extends GrantedAuthority> authorities;

    public JwtUser(long userId, String email, String username, String phoneNo, String password, Boolean enabled,  Collection<? extends GrantedAuthority> authorities) {
        this.id = userId;
        this.email = email;
        this.phoneNo = phoneNo;
        this.username = username;
        this.password = password;
        this.enabled = enabled;
        this.authorities = authorities;
    }

    public long getId() {
        return id;
    }

    public String getEmail() {
        return email;
    }

    public String getPhoneNo() {
        return phoneNo;
    }

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

    @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 enabled;
    }
}
与:

return new JwtUser(user.get().getUserId(), user.get().getEmail(), user.get().getUsername(),
                user.get().getPhoneNo(), user.get().getPassword(), Boolean.TRUE, grantedAuthoritySet(user.get().getAuthorities()));

非常感谢。这是工作,但我不明白怎么做。我们创建类并实现userDetails接口。我可以在类User中实现这个接口吗,或者我们需要创建JwtUser?目前我在办公室,我会尽快回答你。事实证明,无论我在哪里需要使用User,我都使用JwtUser?对吗?很抱歉回复太晚了实际上我忘了。安全性库使用UserDetails,其中包含一些预定义的数据成员&getter setter,并相应地配置了安全性内部流程。因此,当您想要使用它时,您必须在userdetails Entity中转换您的用户数据,因为您的用户有许多列,这对于安全检查是不必要的。因此,我维护名为JWTUser的类,该类执行此操作并将其转换为UserDetails。你们可以用匿名的方法在同一个班级里用你们自己的方式来管理它。若你们方面同意的话,请你们投票表决这个答案好吗?
public class JwtUser implements UserDetails {

    private final long id;
    private final String email;
    private final String phoneNo;
    private final String username;
    private final String password;
    private final boolean enabled;
    private final Collection<? extends GrantedAuthority> authorities;

    public JwtUser(long userId, String email, String username, String phoneNo, String password, Boolean enabled,  Collection<? extends GrantedAuthority> authorities) {
        this.id = userId;
        this.email = email;
        this.phoneNo = phoneNo;
        this.username = username;
        this.password = password;
        this.enabled = enabled;
        this.authorities = authorities;
    }

    public long getId() {
        return id;
    }

    public String getEmail() {
        return email;
    }

    public String getPhoneNo() {
        return phoneNo;
    }

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

    @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 enabled;
    }
}
return new org.springframework.security.core.userdetails.User(user.getUsername(),
                user.getPassword(),
                true,true,true,true,
                getAuthorities("ROLE_USER"));
return new JwtUser(user.get().getUserId(), user.get().getEmail(), user.get().getUsername(),
                user.get().getPhoneNo(), user.get().getPassword(), Boolean.TRUE, grantedAuthoritySet(user.get().getAuthorities()));