Spring Boot - 使用inMemoryAuthentication

时间:2017-11-22 12:14:06

标签: java spring spring-mvc spring-boot spring-security

我使用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()

1 个答案:

答案 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对象