如何从文件中将用户添加到AuthenticationManagerBuilder?

时间:2016-06-22 15:48:23

标签: java spring spring-security

我正在撰写一个Google Chrome扩展程序,该扩展需要我使用Spring设置的用户身份验证,目前我在代码中有一些示例用户名和密码,而我还在开发中。此时,我已准备好添加真实的用户名和密码,但我希望能够将它们从外部文件加载到AuthenticationManagerBuilder对象中。

以下是目前的相关代码:

@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
    auth
        .inMemoryAuthentication()   
            .withUser("user1").password("password1").roles("USER").and()
            .withUser("user2").password("password2").roles("USER").and()
            .withUser("user3").password("password3").roles("USER");
}

我希望能够从包含以下内容的文件构建auth对象:

user1    password1
user2    password2
user3    password3

我该怎么做(如果可能的话)?

3 个答案:

答案 0 :(得分:3)

请改用UserDetailsService。只需阅读public void onDroneEvent(String event, Bundle extras) { switch (event) { case AttributeEvent.PARAMETER_RECEIVED: //Grab extra parameter data //possibly using AttributeEventExtra.EXTRA_PARAMETER_NAME // AttributeEventExtra.EXTRA_PARAMETER_INDEX // AttributeEventExtra.EXTRA_PARAMETER_VALUE break; . . . removed extraneous code . . . 方法中的文件,如果存在给定loadUserByUsername(String username)的任何用户,则返回代表该用户的UserDetailsUser。否则抛出UsernameNotFoundException例外:

username

答案 1 :(得分:0)

我找到了一种更简单的方法:

@Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        InMemoryUserDetailsManagerConfigurer imudmc = auth.inMemoryAuthentication();
        String[] creds = {"user|password", "user2|password"};
        for (int i = 0; i < creds.length; i++) {
            imudmc.withUser(StringUtils.substringBefore(creds[i], "|")).password(StringUtils.substringAfter(creds[i], "|")).roles("USER");
        }
    }

显然应该从文件中读取数组。

答案 2 :(得分:0)

在JSON中定义,包括角色。使用自己的序列化程序(支持JSON和XML)从String而不是文件进行了测试。

        consumers = (Consumers) serialiser.recover("{ \"Consumers\" : [ { \"Name\" : \"localhost\", \"Password\" : \"none\", \"Roles\" : [ \"USER\", \"ADMIN\" ]  } ]}", Consumers.class);
        if (null != consumers && null != consumers.getConsumers()) {
            InMemoryUserDetailsManagerConfigurer imudmc = auth.inMemoryAuthentication();
            for (Consumer consumer : consumers.getConsumers()) {
                   imudmc.withUser(consumer.getName()).password(consumer.getPassword()).roles(consumer.getRoles());
            }
        }