2017-04-12 1 views
-1

문제가 생겼습니다. 스프링 부트로 인한 휴식 응용 프로그램과 스프링 보안으로 URL의 보안 액세스가 있습니다.REST에서 스프링 부트로 스프링 보안으로 사용자 역할을 업데이트하는 방법

이 구성

@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; 
} 

되고 WebSecurityConfigurerAdapter를 확장하는 클래스에서 스프링 데이터 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(); 

의 데이터베이스의 접근}

.

그러나 일부 시스템에서는 사용자의 고유 한 데이터베이스로 작업하기 때문에이 코드에 사용자와 역할을 포함하는 대신 기본 데이터를 사용합니다.

내 문제는 구성이 데이터베이스에서 설정되었다고하더라도 사용자가 모든 역할 업데이트를 가지고 있으면 Spring Boot에서 응용 프로그램을 시작한 경우에만 구성이 작동한다는 것입니다. 시작한 후에는 Spring Boot가 업데이트되지 않습니다.

누군가가 이미이 시나리오에서 스프링 부트를 사용하고 있는지, 이것이 가능한지 알고 싶습니다.

연구에서 일부 컨트롤러가 Rest InRemoryUserDetailsManager를 업데이트하는 것을 발견했습니다.이 경우에는 역할을 업데이트하기 위해 InMemoryUserDetailsManager의 Rest Controller에 PUT을 구현해야합니다.

감사합니다.

+0

메모리 사용자 데이터 대신 데이터베이스를 사용 하시겠습니까? 데이터베이스를 사용하여 사용자와 역할을 저장하는 경우 기존 사용자의 새 역할을 업데이트하고 저장하는 것이 더 쉬울 것입니다. –

+0

안녕하세요, 회신 해 주셔서 감사합니다. 이미 데이터베이스를 사용하여 내 사용자와 역할을 저장하고 있습니다. 이게 문제 야. 스프링 부트는 데이터베이스에 변경 사항이 있으면 내 역할을 업데이트하지 않습니다. –

+0

데이터베이스의 데이터에 액세스하는 방법에 대한 코드를 공유 할 수 있으며 어떤 chaching 기술을 사용하고 있습니까? – Alekhya

답변

0

첫 번째 구현은 정확했다 나는 브라우저에서 테스트하고 항상 세션에서 사용자와 암호를 삽입하고, 내 실수, 미안 얘들 아!

0

당신이 봄 부트를 사용하여 브라우저가 뷰를 업데이트하지 않는 경우, 당신은 당신의 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

답장을 보내 주셔서 감사합니다. 그러나 이것은 나에게 효과가 없습니다. REST를 사용하는 스프링 부트는 시작 애플리케이션의 동일한 역할을 유지하고 데이터베이스에서 역할을 변경하면 업데이트되지 않습니다. –

관련 문제