2017-11-06 4 views
0

방금 ​​Spring을 사용하기 시작했으며 지식이있는 사람이 나를 도울 수 있기를 바랍니다. 스프링 휴식 데이터를 사용하는 스프링 레포지토리가 있습니다. 나는 다음과 같은 일을하는 방법을 찾으려고 노력하고있다.spring REST 저장소 - 반환 된 응답 필드 수정

  1. 액세스 인증 된 사용자 요청 및 사용자 속성에 기반하여, 그들이이 특성이 있는지 여부에 따라 저장소 응답 필드 중 하나 마스크에 온다. 예를 들어 데이터 목록을 가져 오기 위해 요청이 들어옵니다. 그러나 우리가 데이터를 반환하기 전에 사용자가 예를 들어 "돈을 지불했는지"확인하고 데이터를 그대로 두거나 그렇지 않은 경우 응답 필드를 변경하여 해당 내용을 마스크하고 "내용 필드 값"을 "..."로 바꿉니다. "예를 들면. 표준 저장소를 사용하여이 작업을 수행 할 수 있습니까? 아니면 컨트롤러로 변경하고 모든 코드를 다시해야합니까? 아래 예제 코드 :

    공개 인터페이스 ReadOnlyRepository는 저장소 { T findOne (ID id)를 확장합니다.

    공용 인터페이스의 ContentRepository이 ReadOnlyRepository <를 확장

    Iterable<T> findAll(); 
    
    Iterable<T> findAll(Sort sort); 
    
    Page<T> findAll(Pageable pageable); 
    

    } ...> {

    }

    // 내가 함께 즉시 교체해야하는 분야 '...' @Entity 공개 클래스 콘텐츠 {

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private long id; 
    
    @Column(nullable = false) 
    private String content; 
    
    ,

    } 당신이 설정에게 봄의 보안 컨텍스트를 가지고 가정

답변

0

, 아래의 getContent() 메소드하여 Entity 클래스

public String getContent(){ 

    Authentication auth = 
    SecurityContextHolder.getContext().getAuthentication(); 
    if(auth.getAuthorities().contains(new SimpleGrantedAuthority("ADMIN"))) { 
    return content; 
    }else{ 
     return "..."; 
    } 

} 
+0

감사합니다처럼 할 수 있습니다. 이것은 대략 내가 찾고 있었던 것입니다. 필자가 사용해야하는 db 필드는 사용자 데이터베이스 테이블에서 가져온 것이지만 권한이나 범위는 아닙니다. 기본적으로 oauth2를 사용하여 사용자를 기록하고 토큰을 사용하여 API에 액세스합니다. 보안 컨텍스트가이 토큰을 사용하여 사용자에게 액세스하여 인증 할 수 있으며 권한 부여와 동일한 방식으로 사용자 엔터티 필드에 대한 액세스 권한을 얻을 수 있습니까? – Richard

+0

Richard, 봄에 간단한 인증 필터를 작성하고 토큰을 처리하고 데이터베이스의 사용자와 대조 한 다음 보안 컨텍스트를 채 웁니다. 이것은 완벽한 사용 사례입니다. 보안 컨텍스트는 인증 세부 정보를 저장하는 데 사용됩니다. – VimalKumar