我遇到了一个问题,我有一个带有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来更新角色?
谢谢!
答案 0 :(得分:0)
如果您正在使用Spring启动并且浏览器没有更新您的视图,则需要将这两行添加到您的application.properties配置文件中:
spring.resources.chain.strategy.content.enabled=true
spring.resources.chain.strategy.content.paths=/**
你可以在这里进一步阅读:
答案 1 :(得分:0)
首先实现是正确的,我在浏览器上进行测试,并且总是在会话中插入用户和密码,我的错误,对不起伙计们!