涛涛之海 2017-09-03 06:58 采纳率: 0%
浏览 1404
已采纳

servlet过滤器 过滤黑名单Ip 404错误找不到页面

 public class MainAction implements Filter {

    /**
     * 
     */
     private String charset;
        //黑名单
        private Set<String> set = new HashSet<String>();

        @Override
        public void init(FilterConfig filterConfig) throws ServletException {

            charset = filterConfig.getInitParameter("charset");

            //到数据库中把黑名单加载进来,这里简单模拟一下
            set.add("192.168.31.168");
        }

        @Override
        public void doFilter(ServletRequest request, ServletResponse response,
                FilterChain chain) throws IOException, ServletException {
              request.setCharacterEncoding(charset);
            //以下演示黑名单过滤技术
            String ip = request.getRemoteAddr();;//获得客户端的IP
            if(set.contains(ip)){
                HttpServletResponse resp = (HttpServletResponse) response;
                resp.setContentType("text/html;charset=utf-8");
                resp.getWriter().println("你已被列入黑名单!");
            }else{//放行
                chain.doFilter(request, response);
            }
        }

        @Override
        public void destroy() {
        }


}
 <filter>
    <filter-name>MainAction</filter-name>
    <filter-class>nuc.bl.Servlet.MainAction</filter-class>
    <init-param>
        <param-name>charset</param-name>
        <param-value>utf-8</param-value>    
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>MainAction</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  • 写回答

4条回答

  • 鼠晓 博客专家认证 2017-09-03 08:10
    关注

    我试了一下,,题主的方法没错,,就是本地访问本地时,不会用IP地址(测出来的,找了半天不知道什么原因。)

    解决方法
    【1】set.add("192.168.31.168");改成 set.add("127.0.0.1");

    【2】request.getRemoteAddr();;//获得客户端的IP,,获取到的id题主可以打印一下,,是“0:0:0:0:0:0:0:1”

    需要用下面方法获取,,,
    String ip = getRemoteAddress((HttpServletRequest) request);

     /**
         * 获取访问IP
         * @param request
         * @return
         */
        public String getRemoteAddress(HttpServletRequest request) {
            String ip = request.getHeader("x-forwarded-for");
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("Proxy-Client-IP");
            }
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("WL-Proxy-Client-IP");
            }
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getRemoteAddr();
            }
            return ip.equals("0:0:0:0:0:0:0:1") ? "127.0.0.1" : ip;
        }
    

    有什么问题还可以追问,,,,,有帮助请采纳

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况
  • ¥15 画两个图 python或R
  • ¥15 在线请求openmv与pixhawk 实现实时目标跟踪的具体通讯方法
  • ¥15 八路抢答器设计出现故障
  • ¥15 opencv 无法读取视频