2013-10-10 2 views
2

스프링 보안 역할을 취소 할 수있는 방법이 있습니까? 특히, 나는 UserDetails.getAuthorities() 객체스프링 보안 역할을 제거

Collection<? extends GrantedAuthority> authorities = userDetails.getAuthorities(); 
authorities.remove(new SimpleGrantedAuthority("ROLE_TO_BE_REMOVED")); 

이 코드가 성공적으로 컴파일됩니다에서 요소를 제거 할 만, 삭제가 호출 될 때 UnsupportedOperationException 발생합니다. 문제는 표준 인증 구현을 통해 getAuthorities가 반환하는 Collection을 수정할 수 없다는 것입니다 (Collections $UnmodifiableRandomAccessList<E> 반환).

그래서 내가 필요로하는 것은 다른 방식으로 역할을 제거하거나 컬렉션 불변성을 우회하는 방법입니다. 사용

봄 버전 : 3.2.2.RELEASE, 봄 보안 버전 : 3.1.3.RELEASE

답변

0

난 당신이 org.springframework.security.provisioning.UserDetailsManager.updateUser()를 사용할 필요가 같아요.

+0

글쎄, 여전히 UserDetails 객체에서 권한을 설정해야한다. – lolotron

+0

바이 패스 무손실 솔루션으로 권한을 'ArrayList'에 넣을 수 있으므로 새로운 컬렉션에 복사 한 다음 역할을 제거한다. – Admit

관련 문제