我正在撰写一个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
我该怎么做(如果可能的话)?
答案 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)
的任何用户,则返回代表该用户的UserDetails
或User
。否则抛出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());
}
}