如何使用Spring Security通过InMemoryAuthentication记录自定义用户?

时间:2014-03-21 16:41:43

标签: java spring spring-mvc spring-security

我有一个使用Spring Security保护的Spring MVC Web应用程序,我正在编写测试。我很难在SpringContextHolder中获取Spring Security检索到的一个(自定义)用户。 一旦我的用户被“插入”(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直接返回通过“getUserDetailsS​​ervice(。。createUser”调用发送给他的内容的问题但是必须有一个...... 无论如何,我可能在这里做错了什么,有什么想法吗?

1 个答案:

答案 0 :(得分:7)

与建议一样,我最终编写了一个自定义InMemoryUserDetailsManager,我将Spring安全配置提供给。{ 对于任何想知道的人来说,这似乎是唯一的方式。