我使用Spring Initializer,嵌入式Tomcat,Thymeleaf模板引擎和包作为可执行的JAR文件生成了一个Spring Boot Web应用程序。
使用的技术:
Spring Boot 2.0.0.M6,Java 8,maven
我有这个安全配置文件,以便在开发阶段用于内存验证
在我的应用中。我有一个用户域对象:
import org.springframework.security.core.userdetails.UserDetails;
public class User implements Serializable, UserDetails {
..
}
在我的安全配置类
中@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser(User
.withDefaultPasswordEncoder()
.username(DEV_USER)
.password(DEV_PWD)
.roles("ADMIN").build());
}
但是当我从SecurityContextHolder获取用户时:
SecurityContextHolder.getContext().
getAuthentication().getPrincipal()
我收到了一个错误:
org.springframework.security.core.userdetails.User cannot be cast to com.iberia.domain.backend.User
但我找不到构建UserDetails对象的方法:
UserDetails
.withDefaultPasswordEncoder()
.username(DEV_USER)
.password(DEV_PWD)
.roles("ADMIN").build()
答案 0 :(得分:0)
您可以使用org.springframework.security.core.userdetails.User
String username = DEV_USER;
String encodedPassword = //encoded password
List<SimpleGrantedAuthority> authList = getAuthorities("ADMIN");
User user = new User(username, encodedPassword, authList);
拥有:
用户==&GT; org.springframework.security.core.userdetails.User
SimpleGrantedAuthority ==&GT; org.springframework.security.core.authority.SimpleGrantedAuthority
然后您可以将用户对象强制转换为org.springframework.security.core.userdetails.UserDetails
对象