读取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、拦截器在方法前后,异常前后等调用,而过滤器只能在请求前和请求...
- `Day01_LoginInterceptor`:这个文件名可能代表一个拦截器类,里面包含`preHandle()`, `postHandle()`, 和 `afterCompletion()` 方法。`preHandle()` 方法中通常会检查session中的登录状态,如果未登录则跳转至...
JavaEE 拦截器是企业级Java应用程序中一个重要的组件,它允许开发者在方法调用前后插入自定义的行为,而无需修改原有的业务...深入研究和实践Day01_Interceptor目录下的源代码,将有助于你更好地理解和应用拦截器机制。
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拦截器)" 描述的是一个使用SpringBoot框架构建的应用中,通过拦截器来统计URL访问次数,并利用Redis作为缓存存储这些计数的过程。这个技术方案通常用于网站性能优化,通过...
这个压缩包文件可能是某个项目的一部分,其中包含了一个实现通用分页功能以及使用拦截器的示例。 Struts2是一个强大的MVC框架,它提供了一种组织应用程序的方式,使得业务逻辑与展示逻辑分离。版本2.3.15.3是Struts...
编写 Servlet 并添加两个 Filter,并确保在 Servlet 执行之前和之后...在此方法中,您可以编写逻辑,例如打印 "Filter01 before",并在处理完请求后打印 "Filter01 after"。 创建第二个 Filter,将其命名为 Filter02
互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术...
资源简介:SSM Java 项目集合 一、概述 在这个平台上,我们为大家带来了一系列的 JavaSSM(Spring + SpringMVC + MyBatis)项目。这些项目旨在展示SSM框架在实际应用中的魅力,同时也为开发者提供了一个快速学习和...
为了满足广大Android开发爱好者与从业者的学习需求,我们精心整理并上传了一份全面而实用的Android项目资源包。这份资源包内容丰富,涵盖了从基础知识到实战应用的全方位内容,旨在为开发者们提供一个便捷、高效的...
在day01的课程中,你可能会学习如何定义和使用拦截器,以及如何在配置文件中配置拦截器栈。 6. **注解配置**:除了XML配置,Struts2还支持注解配置,使得代码更加简洁。Action类、方法和参数都可以通过注解来定义,...
29-Flume自定义拦截器-多路复用选择器介绍).avi 30-Flume自定义拦截器-编码.avi 31-Flume自定义拦截器-打包&配置信息.avi 32-Flume自定义拦截器-案例测试.avi 35-Flume自定义Source-打包测试.avi 38-Flume-事务源码...
Struts2的拦截器栈允许开发者自定义拦截器,并根据需求组合使用,提高了代码的可复用性和模块化。 【Struts2】是一个基于MVC(模型-视图-控制器)设计模式的Java Web应用框架。它提供了丰富的功能,包括动作调度、...
默认拦截器的设置主要是为了简化配置,当一个包中的所有Action都需要使用一些共同的拦截器或者拦截器栈时,可以在struts.xml中通过标签指定默认拦截器引用。例如,配置默认拦截器栈为“basicStack”: ```xml ...
下面将详细讲解Spring Boot如何实现全局异常拦截,并结合给出的"spring-boot-01"文件,探讨相关知识点。 1. **Spring Boot基础知识** Spring Boot简化了Java Web应用的开发,通过内嵌Servlet容器(如Tomcat或Jetty...
从描述中我们可以推测,"Shark" 可能是一款针对计算机用户或IT专业人员的工具,可能是性能分析器、网络监控工具或者数据处理软件等。标签 "shark" 确认了我们的假设,即这个软件与 "Shark" 这个名称相关。 在提供的...
Struts2的配置文件通常为struts.xml,其中包含了Action的配置、结果类型定义、拦截器栈配置等,这些配置是Struts2框架运行的基础。例如,你可以在这里指定Action的执行方法、返回结果类型以及需要的拦截器。 SSH...
同时,可能会讲解如何自定义拦截器,以及在实际项目中如何组合使用不同的拦截器链。 Day04可能涉及Struts2的国际化、异常处理和文件上传下载等进阶主题。国际化允许开发出支持多语言的应用,而异常处理则能确保程序...