获取错误“;未找到能够从java.lang.String类型转换为org.springframework.security.core.GrantedAuthority类型的转换器;
我在我的应用程序中使用Spring引导和Spring安全性。当我从数据库中获取用户时,我遇到以下错误,即使我包含了它的所有依赖项: 未找到能够从java.lang.String类型转换为org.springframework.security.core.GrantedAuthority类型的转换器 这是如何造成的,我如何解决 我的实体是获取错误“;未找到能够从java.lang.String类型转换为org.springframework.security.core.GrantedAuthority类型的转换器;,java,spring,spring-mvc,spring-boot,Java,Spring,Spring Mvc,Spring Boot,我在我的应用程序中使用Spring引导和Spring安全性。当我从数据库中获取用户时,我遇到以下错误,即使我包含了它的所有依赖项: 未找到能够从java.lang.String类型转换为org.springframework.security.core.GrantedAuthority类型的转换器 这是如何造成的,我如何解决 我的实体是 public class User { public static final String USERNAME = "username"; pu
public class User {
public static final String USERNAME = "username";
public static final String PASSWORD = "password";
public static final String ROLES = "roles";
@Id String id;
String firstName;
@JsonProperty(PASSWORD)
String password;
@JsonProperty(USERNAME)
String userName;
@JsonProperty(ROLES)
@JsonSerialize(contentUsing = GrantedAuthoritySerializer.class)
@JsonDeserialize(contentUsing = GrantedAuthorityDeserializer.class)
private List<GrantedAuthority> roles;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public List<GrantedAuthority> getRoles() {
System.out.println("roles"+roles);
return roles;
}
@Override
public String toString() {
return new ToStringBuilder(this)
.append("username", userName)
.append("password", password)
.append("roles", roles)
.toString();
}
授权提供者
UserDetails loadedUser;
System.out.println("username"+username);
try {
com.samepinch.domain.user.User samepinchuser = userService.findUserByUsername(username);
System.out.println("samepinchuser"+samepinchuser);
loadedUser = new User(samepinchuser.getUserName(), samepinchuser.getPassword(),samepinchuser.getRoles());
System.out.println("loaded user"+loadedUser);
} catch (Exception repositoryProblem) {
throw new InternalAuthenticationServiceException(repositoryProblem.getMessage(), repositoryProblem);
}
该错误所抱怨的转换器是JPA
AttributeConverter
。GrantedAuthority
不是JPA实体,因此需要一种方法将其映射到数据库列。您有两种选择:
AttributeConverter
,它将授予的权限
转换为字符串
(并根据界面返回)。AttributeConverter
需要包含在JPA实体扫描的类中(将其放在与实体相同的包中应该可以工作)List
,然后使用AuthorityUtils.createAuthorityList(String…
)提供一个get方法,该方法仅转换为List
建议使用第一种方法。
UserDetails loadedUser;
System.out.println("username"+username);
try {
com.samepinch.domain.user.User samepinchuser = userService.findUserByUsername(username);
System.out.println("samepinchuser"+samepinchuser);
loadedUser = new User(samepinchuser.getUserName(), samepinchuser.getPassword(),samepinchuser.getRoles());
System.out.println("loaded user"+loadedUser);
} catch (Exception repositoryProblem) {
throw new InternalAuthenticationServiceException(repositoryProblem.getMessage(), repositoryProblem);
}