`

拦截器01

    博客分类:
  • Java
 
阅读更多

读取auth.properties中的ip信息,并判断是否和登录IP一致,不一致返回FORBIDDEN

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
	<filter-mapping>
	    <filter-name>authFilter</filter-name>
	    <url-pattern>/*</url-pattern>
    </filter-mapping>

	<filter>
		<filter-name>authFilter</filter-name>
		<filter-class>
		   com.vtradex.server.webservice.web.filter.AuthFilter
		</filter-class>
	</filter>
</web-app>

 AuthFilter.java

import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Date;
import java.util.Properties;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import com.vtradex.server.model.interfaceLog.InterfaceVisitLog;
import com.vtradex.swms.server.service.common.CommonInterfaceManager;
import com.vtradex.thorn.server.model.EntityFactory;

/**
 * Filename    :   AuthFilter.java
 *
 * @description:   
 */
public class AuthFilter implements Filter {
	protected static ApplicationContext ac;
	protected static CommonInterfaceManager commonInterfaceManager;
	
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain filterChain) throws IOException, ServletException {
		String ip = this.getIp((HttpServletRequest)request);
		Boolean checkIp = checkIp(ip);
		if(!checkIp) {
			PrintWriter pw = response.getWriter();
			pw.write("FORBIDDEN!");
			InterfaceVisitLog visitLog = EntityFactory.getEntity(InterfaceVisitLog.class);
			visitLog.setIp(ip);
			visitLog.setContext(request.getContentType());
			visitLog.setVisitTime(new Date());
			visitLog.setStatus("FORBIDDEN");
			commonInterfaceManager.storeVisitLog(visitLog);
		} else {
			filterChain.doFilter(request, response);
		}
	}
	
	public void init(FilterConfig fc) throws ServletException {
		ac = WebApplicationContextUtils.getRequiredWebApplicationContext(fc.getServletContext());
		AuthFilter.commonInterfaceManager = (CommonInterfaceManager) ac.getBean("commonInterfaceManager");
	}

	public void destroy() {
		
	}

	private String getIp(HttpServletRequest request) {
		String ip = request.getHeader("x-forwarded-for");
	     if(ip == null || ip.length() == 0 || ip.equalsIgnoreCase("unknown")) ip = request.getHeader("Proxy-Client-IP"); 
	     	System.out.println(ip);
	     if(ip == null || ip.length() == 0 || ip.equalsIgnoreCase("unknown")) ip = request.getHeader("WL-Proxy-Client-IP");
	     	System.out.println(ip);
	     if(ip == null || ip.length() == 0 || ip.equalsIgnoreCase("unknown")) ip = request.getRemoteAddr();
	     	System.out.println(ip);
	     return ip;
	}
	
	private Boolean checkIp(String ip) {
		System.out.println("---------------------------------------------------------ip: "+ip);
		InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("auth.properties");
		Properties p = new Properties();
		try {
			p.load(inputStream);
			String ips = p.getProperty("ip");
			String[] ipstrs = ips.split(",");
			for(String s : ipstrs) {
				if(ip.equals(s)) {
					return Boolean.TRUE;
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
			return Boolean.FALSE;
		}
		return Boolean.FALSE;
	}

}

 auth.properties

ip=127.0.0.1,0:0:0:0:0:0:0:1,221.226.28.34,221.178.251.172

分享到:
评论

相关推荐

    拦截器和控制器的区别

    拦截器和过滤器的区别 1、拦截器基于动态代理 , 过滤器基于函数回调 2、拦截器不依赖于servlet容器,通过动态代理实现,过滤器依赖于servlet容器 3、拦截器在方法前后,异常前后等调用,而过滤器只能在请求前和请求...

    JavaEE 拦截器用户登录案例源代码

    - `Day01_LoginInterceptor`:这个文件名可能代表一个拦截器类,里面包含`preHandle()`, `postHandle()`, 和 `afterCompletion()` 方法。`preHandle()` 方法中通常会检查session中的登录状态,如果未登录则跳转至...

    JavaEE 拦截器简单示例源代码

    JavaEE 拦截器是企业级Java应用程序中一个重要的组件,它允许开发者在方法调用前后插入自定义的行为,而无需修改原有的业务...深入研究和实践Day01_Interceptor目录下的源代码,将有助于你更好地理解和应用拦截器机制。

    http拦截器.apk

    vxp 拦截Android 网络请求 进行网络抓包! 抓起API,如: 请求头 Content-Type: text/plain; charset=UTF-8 Date: Mon, 17-Feb-2020 09:44:07 GMT Set-Cookie: NSC_ESNS=268be8cb-6067-1e4a-9678-00e0ed457f...

    Redis缓存url访问次数(SpringBoot拦截器)

    标题 "Redis缓存url访问次数(SpringBoot拦截器)" 描述的是一个使用SpringBoot框架构建的应用中,通过拦截器来统计URL访问次数,并利用Redis作为缓存存储这些计数的过程。这个技术方案通常用于网站性能优化,通过...

    (四)struts2- 2.3.15.3 spring3.2.4 mybatis-3.2.3 通用分页(不同数据库) 拦截器(2014-01-27 17:16)

    这个压缩包文件可能是某个项目的一部分,其中包含了一个实现通用分页功能以及使用拦截器的示例。 Struts2是一个强大的MVC框架,它提供了一种组织应用程序的方式,使得业务逻辑与展示逻辑分离。版本2.3.15.3是Struts...

    基于Servlet实现 Filter 拦截器

    编写 Servlet 并添加两个 Filter,并确保在 Servlet 执行之前和之后...在此方法中,您可以编写逻辑,例如打印 "Filter01 before",并在处理完请求后打印 "Filter01 after"。 创建第二个 Filter,将其命名为 Filter02

    ssm整合项目+mybatis拦截器.zip

    资源简介:SSM Java 项目集合 一、概述 在这个平台上,我们为大家带来了一系列的 JavaSSM(Spring + SpringMVC + MyBatis)项目。这些项目旨在展示SSM框架在实际应用中的魅力,同时也为开发者提供了一个快速学习和...

    Android项目中,OKHttp的日志的拦截器.zip

    为了满足广大Android开发爱好者与从业者的学习需求,我们精心整理并上传了一份全面而实用的Android项目资源包。这份资源包内容丰富,涵盖了从基础知识到实战应用的全方位内容,旨在为开发者们提供一个便捷、高效的...

    struts2框架2016版资料day01

    在day01的课程中,你可能会学习如何定义和使用拦截器,以及如何在配置文件中配置拦截器栈。 6. **注解配置**:除了XML配置,Struts2还支持注解配置,使得代码更加简洁。Action类、方法和参数都可以通过注解来定义,...

    大数据技术Flume1.9

    29-Flume自定义拦截器-多路复用选择器介绍).avi 30-Flume自定义拦截器-编码.avi 31-Flume自定义拦截器-打包&配置信息.avi 32-Flume自定义拦截器-案例测试.avi 35-Flume自定义Source-打包测试.avi 38-Flume-事务源码...

    ModelDriven

    Struts2的拦截器栈允许开发者自定义拦截器,并根据需求组合使用,提高了代码的可复用性和模块化。 【Struts2】是一个基于MVC(模型-视图-控制器)设计模式的Java Web应用框架。它提供了丰富的功能,包括动作调度、...

    springboot入门(全局 异常拦截)

    下面将详细讲解Spring Boot如何实现全局异常拦截,并结合给出的"spring-boot-01"文件,探讨相关知识点。 1. **Spring Boot基础知识** Spring Boot简化了Java Web应用的开发,通过内嵌Servlet容器(如Tomcat或Jetty...

    shark1.1-2安装文件-2

    从描述中我们可以推测,"Shark" 可能是一款针对计算机用户或IT专业人员的工具,可能是性能分析器、网络监控工具或者数据处理软件等。标签 "shark" 确认了我们的假设,即这个软件与 "Shark" 这个名称相关。 在提供的...

    Struts2 Basic 14_01 学习笔记(附带SSH所有的jar)

    Struts2的配置文件通常为struts.xml,其中包含了Action的配置、结果类型定义、拦截器栈配置等,这些配置是Struts2框架运行的基础。例如,你可以在这里指定Action的执行方法、返回结果类型以及需要的拦截器。 SSH...

    黑马程序员_struts2框架开发2016版讲义和笔记资料_day01_day02_day03_day04

    同时,可能会讲解如何自定义拦截器,以及在实际项目中如何组合使用不同的拦截器链。 Day04可能涉及Struts2的国际化、异常处理和文件上传下载等进阶主题。国际化允许开发出支持多语言的应用,而异常处理则能确保程序...

    struts day01

    通过在配置文件中定义拦截器栈,可以灵活控制拦截器的执行顺序和条件。 **配置文件** Struts 2 使用 XML 配置文件(通常命名为 `struts.xml` 或 `struts-default.xml`)来定义 Action、结果类型、拦截器栈等。配置...

Global site tag (gtag.js) - Google Analytics