我有一个User
类,它实现了Spring SecurityUser细节
。但是,在登录请求的身份验证期间,它会给出一个ClassCastException
,User细节
不能强制转换为我的User
类。
完整的错误:
java.lang.ClassCastException:类org.springframework.security.core.userdetails.User不能转换为类nl.teamrepositories.vliegmaatschappij.security.domain.User(org.springframework.security.core.userdetails.User在loader'app'的未命名模块中;nl.teamrepositories.vliegmaatschappij.security.domain.User在loaderorg.springframework.boot.devtools.restart.classloader.RestartClassLoader@6ef8cb6的未命名模块中)
用户:
package nl.teamrepositories.vliegmaatschappij.security.domain;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import javax.persistence.*;
import java.util.Collection;
import java.util.List;
@Entity
@Table(name = "users")
@Getter @Setter @NoArgsConstructor
public class User implements UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(nullable = false, unique = true)
private String firstName;
private String lastName;
private String username;
private String password;
private boolean enabled;
private boolean tokenExpired;
public User(String firstName, String lastName, String username, String password) {
this.firstName = firstName;
this.lastName = lastName;
this.username = username;
this.password = password;
}
@ManyToMany
@JoinTable(
name = "users_roles",
joinColumns = @JoinColumn(
name = "user_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(
name = "role_id", referencedColumnName = "id"))
private Collection<Role> roles;
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return List.of(new SimpleGrantedAuthority("ROLE_USER"));
}
@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;
}
}
在JwtAuthentiationFilter中:
@Override
protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response,
FilterChain filterChain, Authentication authentication) {
User user = (User) authentication.getPrincipal(); // this is where the error occurs
// more code
}
我不明白为什么我的< code>User类不能转换为Spring的< code>UserDetails类。
我应该改变什么?
提前感谢。
在JwtAuthentiationFilter
中检查您的导入。我猜您正在使用importorg.springframework.security.core.userdetails.User
而不是您自己的类importnl.teamrepositories.vliegmaatschappij.security.domain.User
:
import nl.teamrepositories.vliegmaatschappij.security.domain.User;
(...)
public class JwtAuthenticationFilter {
(...)
@Override
protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response,
FilterChain filterChain, Authentication authentication) {
User user = (User) authentication.getPrincipal(); // this is where the error occurs
// more code
}
}
在这里或代码中的其他地方,您使用了错误的< code>User类(Spring one而不是您的类)。
问题内容: 这是我最后一个问题的后续,从Pandas数据帧转换为TensorFlow张量对象 我现在处于下一步,需要更多帮助。我正在尝试替换此行代码 替换我自己的数据。我找到了这个答案:TensorFlow教程batch_xs,batch_ys = mnist.train.next_batch(100)的next_batch来自哪里?但我不明白: 1)为什么.next_batch()在我的张量上不
我遇到了这个问题,因为我有一个应用程序,有restful服务,但我需要提供一些静态的。在这个应用程序中,我还使用了注释。看起来这个类是公共的,我可以将其子类化,但我不确定如何配置它。我的目标是覆盖这条线,这样我就可以控制404。
问题内容: 我将快速类与我的Objective-C代码混合在一起。使用Swift 2.3,一切都很好,并按预期工作。 我最近转换为Swift 3,由于对Swift 3进行了所有重命名,因此它更新了几个API调用。我明白了。 但是不好的是,Swift 3似乎已经在 我的 Objective-C类之一中重命名了一个方法。我拥有Objective- C类,并且将所需的方法称为:。但是现在,在转换为Swi
问题内容: 我在一个新项目中将Swift样板代码用于Core Data。我的文件有一个定义的单一实体()和一个属性()。 我有一个看起来像这样的文件: 当我运行它时,它起作用: 我什至可以进入iOS模拟器正在使用的SQLite数据库,并确认已添加该行。 但是,当我运行与上面完全相同的代码,但使用而不是时,出现了与…行关联的错误消息,导致崩溃。如果我继续执行,则每次执行线程1时它都会到达并位于线程1
我的班级 我的Hibernate类 此处异常 异常详细信息 我通过JSP处理参数,并在servlet的方法中处理这些参数。我以前能够用ajax将数据作为json来处理,但我更喜欢用会话来做,并且改变了方法。这部分以前没有给出一个错误,现在给出了一个错误。原因何在?
问题内容: 我正在使用从这里获取的这段代码: 我将我的gmail邮件帐户放在发件人和收款人中,但出现此错误: 问题答案: 您没有在计算机上运行SMTP服务器。 请参阅:无法建立连接,因为目标机器主动拒绝了它