我使用 Spring Initializer、嵌入式 Tomcat、Thymeleaf 模板引擎生成了一个 Spring Boot Web 应用程序,并将其打包为可执行 JAR 文件。

使用的技术:

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() 

请您参考如下方法:

您可以使用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); 

具有: 用户==>org.springframework.security.core.userdetails.User

SimpleGrantedAuthority==>org.springframework.security.core.authority.SimpleGrantedAuthority

然后你可以将 user 对象转换为 org.springframework.security.core.userdetails.UserDetails 对象


评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!