如何使用Spring Security通过InMemoryAuthentication记录自定义用户?
问题内容:
我有一个受Spring Security保护的Spring MVC Web应用程序,并且我正在编写测试。我正在努力让Spring
Security在其SecurityContextHolder中检索我的(自定义)用户之一。一旦我的用户通过以下方式“插入”(java配置):
auth.inMemoryAuthentication().getUserDetailsService().createUser(myCustomUser);
然后,我可以创建相关令牌(UsernamePasswordAuthenticationToken),并要求Spring使用此令牌对我的用户进行身份验证。问题是Spring不会检索
自定义
用户实例,而是其User类的实例。当Spring通过以下方法(从Spring的InMemoryUserDetailsManager中)寻找这样的用户时:
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
UserDetails user = users.get(username.toLowerCase());
if (user == null) {
throw new UsernameNotFoundException(username);
}
return new User(user.getUsername(), user.getPassword(), user.isEnabled(), user.isAccountNonExpired(),
user.isCredentialsNonExpired(), user.isAccountNonLocked(), user.getAuthorities());
}
它使用我的配置提供的详细信息实例化一个新用户。
我看不到InMemoryUserDetailsManager直接返回通过“
getUserDetailsService()。createUser”调用发送给他的内容的问题,但是可能必须有一个……无论如何,我可能在这里做错了任何想法?
问题答案:
像建议的那样,我最终编写了一个自定义InMemoryUserDetailsManager
,并以此作为我的Spring Security配置的输入。
对任何想知道的人来说,这似乎是唯一的方法。