2013-10-10 66 views
2

有沒有辦法撤銷春季安全方面的作用?具體而言,我想從UserDetails.getAuthorities()對象拆卸彈簧安全角色

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

這個代碼可以編譯成功刪除元素,但會拋出UnsupportedOperationException刪除時被調用。問題是,標準的認證實現確保由getAuthorities返回的集合是不可修改的(它返回Collections $UnmodifiableRandomAccessList<E>)。

所以我需要的是一些其他的方式來刪除角色,還是有辦法繞過集合不變性。使用

Spring版本:3.2.2.RELEASE,春季安全版本:3.1.3.RELEASE

回答

0

我猜你需要使用org.springframework.security.provisioning.UserDetailsManager.updateUser()

+0

嗯,我還需要設定當局UserDetails對象 – lolotron

+0

作爲旁路不變性的解決方案,你可以把你的當局'ArrayList',因此他們將被複制到新的集合,然後刪除角色。 – Admit