使用FastJson的过滤器 进行字段自定义过滤

业务场景

业务最近提出一个需求,业务中的价格字段,如果没权限看见就显示***。有权限看见则显示正常数组
如下:
有权限显示的为正常的json串

{    
  ······
  "goodsName": "铜器不是的",
  "collectPrice": "1000"
}

无权限则显示 *****

{
  "goodsName": "铜器不是的",
  "collectPrice": "*****"
}

技术实现难点分析

1.此字段是基础字段,在大量接口中使用,且返回值未做约束,进行单个业务修改工作,则修改工作量过大,且一旦漏掉,对业务存在风险。
2.此字段的访问权限为单独的权限,和接口等权限需要做分离。
3.因为是基础字段,所以字段名在各个实体类中是保持一致的

实现思路

首先我们明白前后端发送请求和返回响应时需要进行序列化和反序列化,那我们是否可以在序列化时进行自定义业务改造,实现在序列化。
查询fastJson,发现提供全局配置,进行序列化和反序列化时的自定义装配。尝试实现后,完成本次需求。

解决代码

直接上图:
全局自定义装配

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {

         ···························
        //新增自定义过滤器
        CollectPriceJsonFilter filter = new CollectPriceJsonFilter();
        config.setSerializeFilters(filter);
        ······························

    }
/**
*自定义过滤器实现
**/
public class CollectPriceJsonFilter implements ValueFilter {

    @Override
    public Object process(Object o, String s, Object o1) {
        if ("collectPrice".equals(s)) {
            //判断是否有显示的权限
            List<String> elPermissions = SecurityUtils.getCurrentUser().getAuthorities().stream().map(GrantedAuthority::getAuthority).collect(Collectors.toList());
            //核心判断,无权限则将此字段置为****
            if (!elPermissions.contains("admin") && !elPermissions.contains("collectPrice:show")) {
                return "*****";
            }
        }
        return o1;
    }
}

打完收工,总结,遇到问题多思考。

我是和弦,如果对你有用,不妨一键三连

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值