@Component
public class ClientPriceFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException {
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");
if(MemberTokenUtil.isVisitor(httpServletRequest)) {
this.hiddenPrice(data);
}
httpServletResponse.setContentLength(JSON.toJSONBytes(result).length);
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);
}
}
}