我面临一个问题,Spring安全性使用Spring Boot和安全访问URL。如何使用Spring Boot在REST中将用户角色更新为Spring Security
此配置是
@Override
protected void configure(AuthenticationManagerBuilder auth) {
try {
montarPermissoesByUsuario(auth);
} catch (Exception e) {
e.printStackTrace();
}
}
public void montarPermissoesByUsuario(AuthenticationManagerBuilder auth) throws Exception {
Set<CsUsuario> usuarios = serviceUsuario.findUsuariosApp();
for (CsUsuario csUsuario : usuarios) {
auth.inMemoryAuthentication().withUser(csUsuario.getUsername()).password(csUsuario.getPassword())
.roles(this.montarRoles(csUsuario));
}
}
public String[] montarRoles(CsUsuario usuario) {
String[] roles = null;
for (CsGrupo grupo : usuario.getGrupos()) {
roles = grupo.getServicosApp().stream().map(CsServicoApp::getRegra).toArray(String[]::new);
}
return roles;
}
和数据库的距离Spring数据JPA
public interface CsUsuarioRepository extends JpaRepository<CsUsuario, String>{
public CsUsuario findByUsername(@Param("username") String username);
@Query(value = CsUsuarioQuery.USUARIO_APP, nativeQuery = true)
public Set<CsUsuario> findUsuariosApp();
接入}
在延伸WebSecurityConfigurerAdapter的类。
但是,我没有在这个代码中包含用户和角色,而是从基础数据中获得,因为我正在为某些系统使用用户的唯一数据库。
我的问题是,只有当我在Spring Boot上启动我的应用程序时,配置才起作用,如果用户有任何角色更新,即使配置从数据库中建立,Spring Boot在启动后也不会更新。
我会知道是否有人已经在这种情况下使用Spring Boot,并且这是可能的。
在研究中,我发现一些实现来更新Rest Controller的Bean InMemoryUserDetailsManager,在这种情况下,我需要实现一个PUT到RestMemoryUserDetailsManager控制器来更新角色?
谢谢!
您是否考虑过使用数据库而不是内存用户数据?如果您将使用数据库来存储您的用户和角色,那么为现有用户更新和保存新角色会更容易 –
嗨,感谢您的回复,因此,我已经使用数据库来存储我的用户及其角色,并且这就是问题。一旦我的数据库发生了一些变化,Spring Boot不会更新我的角色。 –
你可以分享你如何从数据库访问数据的代码,并且你是否使用任何chaching技术? – Alekhya