栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Spring 3.2:基于Spring Security角色过滤Jackson JSON输出

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring 3.2:基于Spring Security角色过滤Jackson JSON输出

有什么好的方法可以根据Spring Security角色过滤JSON输出吗?我正在寻找类似@JsonIgnore的东西,但要寻找角色,例如@HasRole(“ ROLE_ADMIN”)。我应该如何实施呢?对于那些从Google登陆的人来说,这里是Spring Boot 1.4的类似解决方案。

为每个角色定义接口,例如

public class View {    public interface Anonymous {}    public interface Guest extends Anonymous {}    public interface Organizer extends Guest {}    public interface BusinessAdmin extends Organizer {}    public interface TechnicalAdmin extends BusinessAdmin {}}

声明

@JsonView
你的实体,例如

@Entitypublic class SomeEntity {    @JsonView(View.Anonymous.class)    String anonymousField;    @JsonView(View.BusinessAdmin.class)    String adminField;}

并定义一个根据角色

@ControllerAdvice
选择合适的权利JsonView:

@ControllerAdvicepublic class JsonViewConfiguration extends AbstractMappingJacksonResponseBodyAdvice {    @Override    public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {        return super.supports(returnType, converterType);    }    @Override    protected void beforeBodyWriteInternal(MappingJacksonValue bodyContainer, MediaType contentType,          MethodParameter returnType, ServerHttpRequest request, ServerHttpResponse response) {        Class<?> viewClass = View.Anonymous.class;        if (SecurityContextHolder.getContext().getAuthentication() != null && SecurityContextHolder.getContext().getAuthentication().getAuthorities() != null) { Collection<? extends GrantedAuthority> authorities = SecurityContextHolder.getContext().getAuthentication().getAuthorities(); if (authorities.stream().anyMatch(o -> o.getAuthority().equals(Role.GUEST.getValue()))) {     viewClass = View.Guest.class; } if (authorities.stream().anyMatch(o -> o.getAuthority().equals(Role.ORGANIZER.getValue()))) {     viewClass = View.Organizer.class; } if (authorities.stream().anyMatch(o -> o.getAuthority().equals(Role.BUSINESS_ADMIN.getValue()))) {     viewClass = View.BusinessAdmin.class; } if (authorities.stream().anyMatch(o -> o.getAuthority().equals(Role.TECHNICAL_ADMIN.getValue()))) {     viewClass = View.TechnicalAdmin.class; }        }        bodyContainer.setSerializationView(viewClass);    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/387081.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号