<>ip黑名单过滤
import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.
annotation.Autowired; import org.springframework.core.annotation.Order; import
org.springframework.data.redis.core.StringRedisTemplate; import org.
springframework.stereotype.Component; import org.springframework.web.filter.
OncePerRequestFilter; import javax.servlet.FilterChain; import javax.servlet.
ServletException; import javax.servlet.http.HttpServletRequest; import javax.
servlet.http.HttpServletResponse; import java.io.IOException; /** * 描述:黑名单过滤 *
* @author ZMY * @date 2018/11/2711:01 */ @Component @Order(1) @Slf4j public
class IpFilter extends OncePerRequestFilter { @Autowired private
StringRedisTemplate stringRedisTemplate; private static final String
IP_BLACK_LIST_KEY= "ip_black_list_%s"; private static String[] IP_HEADS = new
String[]{"x-forwarded-for", "proxy-client-ip", "wl-proxy-client-ip",
"http_client_ip", "http_x_forwarded_for",}; @Override protected void
doFilterInternal(HttpServletRequest request, HttpServletResponse response,
FilterChain filterChain) throws ServletException, IOException { // 获取IP地址
String ip= WebUtils.getRemoteAddr(request); log.info("请求的ip:{}"+ip); String key
= String.format(IP_BLACK_LIST_KEY,ip); boolean flag = this.stringRedisTemplate.
hasKey(key); if(flag){ // 将相关的错误返回给客户端 WebUtils.write(response,BasicResult.fail(
10001, "ip存在黑名单中")); return; } filterChain.doFilter(request,response); } }
<>这是工具类
import com.google.common.collect.Maps; import com.zhuguang.lession8.model.
BasicResult; import java.io.IOException; import java.io.OutputStreamWriter;
import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import
java.util.Arrays; import java.util.List; import java.util.TreeMap; import javax.
servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ArrayUtils;
/** * @author Hikaru * Created on 2018/5/27. */ @Slf4j public class WebUtils {
private static String[] IP_HEADS = new String[]{"x-forwarded-for",
"proxy-client-ip", "wl-proxy-client-ip", "http_client_ip",
"http_x_forwarded_for",}; public static String getRemoteAddr(HttpServletRequest
request) { for (String header : IP_HEADS) { String ip = request.getHeader(header
); if (ip != null && ip.length() > 0 && !"unknown".equalsIgnoreCase(ip)) { if (
ip.indexOf(",") > -1) { ip = ip.substring(0, ip.indexOf(",")); } return ip; } }
return request.getRemoteAddr(); } public static void write(HttpServletResponse
response, BasicResult basicResult) throws IOException { response.
setCharacterEncoding("UTF-8"); response.setContentType("application/json;
charset=utf-8"); PrintWriter writer = null; OutputStreamWriter osw = null; try {
osw= new OutputStreamWriter(response.getOutputStream(), "UTF-8"); writer = new
PrintWriter(osw, true); String jsonStr = GsonUtils.getGsonInstance().toJson(
basicResult); writer.write(jsonStr); writer.flush(); writer.close(); osw.close()
; } catch (UnsupportedEncodingException e) { log.error("过滤器返回信息失败:" + e.
getMessage(), e); } catch (IOException e) { log.error("过滤器返回信息失败:" + e.
getMessage(), e); } finally { if (null != writer) { writer.close(); } if (null
!= osw) { osw.close(); } } } /** * 是否匹配配置路径 */ public static boolean match(
HttpServletRequest request,List<String> paths) { String path = request.
getRequestURI(); boolean flag = false; for (String string : paths) { if (string.
matches(path)) { flag = true; break; } } return flag; } /** * 拼接get参数和post参数列表
*/ public static String paramResult(HttpServletRequest request) { TreeMap<String
, String> tree = Maps.newTreeMap(); request.getParameterMap().forEach( (key,
value) -> { if (ArrayUtils.isNotEmpty(value) && isNotBlankArray(value)) { tree.
put(key, Arrays.toString(value)); } } ); StringBuilder sb = new StringBuilder();
tree.forEach((key, value) -> { sb.append(key); sb.append("="); sb.append(value)
; }); return sb.toString(); } private static boolean isNotBlankArray(String[]
value) { if (value.length == 1 && value[0] == "") { return false; } return true;
} }

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信