gpt4 book ai didi

java - 删除 Spring 安全角色

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:07:36 26 4
gpt4 key购买 nike

有没有办法撤销 spring 安全角色?具体来说,我想从 UserDetails.getAuthorities() 中删除元素对象

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

此代码将成功编译,但会抛出 UnsupportedOperationException调用 remove 时。问题在于标准身份验证实现确保 getAuthorities 返回的集合是不可修改的(它返回 Collections $UnmodifiableRandomAccessList<E> )。

所以我需要的是一些其他方法来删除角色,或者绕过集合不变性的方法。

使用的Spring版本:3.2.2.RELEASE,Spring安全版本:3.1.3.RELEASE

最佳答案

这应该可以解决问题:

public void removeRole(String role){
Authentication auth = SecurityContextHolder.getContext().getAuthentication();

List<GrantedAuthority> updatedAuthorities =
auth.getAuthorities().stream()
.filter(r -> !role.equals(r.getAuthority()))
.collect(Collectors.toList());

Authentication newAuth = new UsernamePasswordAuthenticationToken(
auth.getPrincipal(), auth.getCredentials(), updatedAuthorities);

SecurityContextHolder.getContext().setAuthentication(newAuth);
}

关于java - 删除 Spring 安全角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19295185/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com