我遇到了一个问题,我有一个带有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 回答
如果您使用的是Spring引导并且浏览器未更新视图,则需要将这两行添加到application.properties配置文件中:
你可以在这里进一步阅读:
http://docs.spring.io/spring-boot/docs/1.5.2.RELEASE/reference/htmlsingle/#boot-features-spring-mvc-static-content
第一次实现是正确的,我在浏览器上测试并且总是在会话中插入用户和密码,我的错误,抱歉伙计们!