首页 文章

如何在REST中使用Spring Boot将用户角色更新到Spring Security

提问于
浏览
-1

我遇到了一个问题,我有一个带有Spring Boot的Rest应用程序,以及Spring安全性对URL的安全访问 .

这个配置是

@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 Data 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上启动应用程序时,配置才有效,如果用户有任何角色更新,即使配置是从数据库 Build 的,Spring Boot也不会在启动后更新 .

我知道是否有人已经在这种情况下使用Spring Boot,如果可能的话 .

在研究中我发现了一些通过Rest Controller更新bean InMemoryUserDetailsManager的实现,在这种情况下我需要实现一个PUT到InMemoryUserDetailsManager的Rest Controller来更新角色?

谢谢!

2 回答

  • 0

    如果您使用的是Spring引导并且浏览器未更新视图,则需要将这两行添加到application.properties配置文件中:

    spring.resources.chain.strategy.content.enabled=true
    spring.resources.chain.strategy.content.paths=/**
    

    你可以在这里进一步阅读:

    http://docs.spring.io/spring-boot/docs/1.5.2.RELEASE/reference/htmlsingle/#boot-features-spring-mvc-static-content

  • 0

    第一次实现是正确的,我在浏览器上测试并且总是在会话中插入用户和密码,我的错误,抱歉伙计们!

相关问题