@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);
}
}
}
Spring Boot使用Filter过滤器来过滤权限价格
最新推荐文章于 2025-05-07 15:44:10 发布