我使用基本身份验证创建了一个安全的springrestapi。我正在尝试允许此服务的用户使用其中一个端点方法(不需要身份验证的方法)指定用户名/密码组合,并在该方法中将这些凭据添加到允许用户访问所有其他端点方法的凭据列表中。
安全配置的形式如下:
@Configuration
@EnableWebSecurity
public class CustomWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
...
@Autowired
public void configureGlobalSecurity(final AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception {
authenticationManagerBuilder.inMemoryAuthentication().withUser("bill").password("abc123").roles("ADMIN");
authenticationManagerBuilder.inMemoryAuthentication().withUser("tom").password("abc123").roles("USER");
}
....
}
这样就可以提前创建一些凭证。但我不需要它;我希望用户在运行时注册凭据。
我设法让客户端绕过了一个端点函数的安全性,这一个:
@RequestMapping(value = "/srv/register_player/{userName}/{password}")
public @ResponseBody ResponseEntity<Player> registerUser(@PathVariable final String userName, @PathVariable final String password) {
...
}
在该方法中,我希望将用户提供的用户名和密码添加到允许访问其他rest函数/方法的凭据列表中。
我尝试将authenticationmanagerbuilder自动连接到控制器中,并在registeruser方法中添加了以下内容:
...
authenticationManagerBuilder.inMemoryAuthentication().withUser(userName).password(password).roles("USER");
...
但在运行时,它抛出以下异常:
java.lang.IllegalStateException: Cannot apply org.springframework.security.config.annotation.authentication.configurers.provisioning.InMemoryUserDetailsManagerConfigurer@d9464f3 to already built object
这是有道理的,但我还是希望能做到这一点。有可能吗?我需要这种内存身份验证方法吗?该方法还将凭据放在数据库中,因此所有注册用户都可以在一个名为user的表中使用。
谢谢!
克杰尔德
暂无答案!
目前还没有任何答案,快来回答吧!