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

时间:2017-04-12 13:45:59

标签: spring rest spring-mvc spring-boot spring-security

我遇到了一个问题,我有一个带有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上启动应用程序时,配置才有效,如果用户有任何角色更新,即使配置是从数据库建立的,Spring Boot也不会在启动后更新。

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

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

谢谢!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

首先实现是正确的,我在浏览器上进行测试,并且总是在会话中插入用户和密码,我的错误,对不起伙计们!