Spring Boot使用Filter过滤器来过滤权限价格

@Component
public class ClientPriceFilter extends OncePerRequestFilter {
    
    @Override
    protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException {
		/**过滤器顺序:用户访问 ==>JWT认证==>一进过滤器==>判断是否过滤==>去请求资源==>
		需要过滤进行过滤==> 二进过滤器进行过滤操作,否则就直接放行
		**/
        String uri = httpServletRequest.getRequestURI();
        if (uri.startsWith("/client")&&!uri.startsWith("/client/download")) {
            ResponseWrapper wrapper = new ResponseWrapper(httpServletResponse);

            filterChain.doFilter(httpServletRequest,wrapper);
            String responseStr = new String(wrapper.toByteArray(), httpServletResponse.getCharacterEncoding());

            if(StringUtil.isNotNull(responseStr)) {
                JSONObject result = (JSONObject) JSON.parse(responseStr);


                Object data =  result.get("data");
                //TODO 判断是否有权限后
                //将价格隐藏
                if(MemberTokenUtil.isVisitor(httpServletRequest)) {
                    this.hiddenPrice(data);
                }

                httpServletResponse.setContentLength(JSON.toJSONBytes(result).length);
                //根据http accept来设置,我这里为了简便直接写json了
                httpServletResponse.setContentType("application/json;charset=utf-8");
                httpServletResponse.getOutputStream().write(JSON.toJSONBytes(result));
            }


        }else{
            filterChain.doFilter(httpServletRequest,httpServletResponse);
        }
    }

    private void hiddenPrice(Object data){

        if(data instanceof JSONObject) {
            this.handelJSONObject(data);
        }else if(data instanceof JSONArray){
            this.handelJSONOArray(data);
        }else{
            return ;
        }

    }


    private void handelJSONObject(Object data) {
        JSONObject obj =  (JSONObject) data;

        Set<String> keySet = obj.keySet();

        for(String key : keySet) {
            if("price".equals(key)|| "minPrice".equals(key) || "maxPrice".equals(key)) {
                if(Constants.NO.equals(obj.getString("isPublish"))){
                    obj.put(key,null);
                }
            }
            Object inData = obj.get(key);
            this.hiddenPrice(inData);
        }
    }


    private void handelJSONOArray(Object data) {

        JSONArray array =  (JSONArray) data;
        for(int i = 0;i<array.size();i++) {
            Object obj =  array.get(i);
            this.hiddenPrice(obj);
        }

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值