当前位置:  编程技术>java/j2ee

jsp防止跨域提交数据的具体实现

    来源: 互联网  发布时间:2014-10-20

    本文导语:  代码如下: //ArgsIsValidFilter .java过滤器代码清单: package com.hety.uitl; import java.io.IOException; import java.util.Enumeration; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.se...

代码如下:

//ArgsIsValidFilter .java过滤器代码清单:
package com.hety.uitl;

import java.io.IOException;
import java.util.Enumeration;

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 javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class ArgsIsValidFilter implements Filter {

private static Log log = LogFactory.getLog(ArgsIsValidFilter.class);

public void destroy() {

}

@SuppressWarnings("unchecked")
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) arg0;
HttpServletResponse response = (HttpServletResponse) arg1;
String servername_str = request.getServerName();
String currentURI = request.getRequestURI();
Enumeration headerValues = request.getHeaders("Referer");
String tmpHeaderValue = "";
boolean isValid = true;
//指定需要跳过拦截的页面地址,如果需要新增,可直接在数组中添加。
//“建议”
String [] ignoreURIS={"/back/",
"/Info.jsp",
"/pzxx.jsp"
};
while (headerValues.hasMoreElements()) {
// 得到完整的路径:如“http://www.domain.com.cn:8023/front/zwgk/zwgk.jsp?id=1283”
tmpHeaderValue = (String) headerValues.nextElement();
}

if(log.isInfoEnabled()){
log.info(" 获得的参数url为: " + tmpHeaderValue );
log.info(" 系统取得的url为:"+ currentURI);
}

if ("".equals(tmpHeaderValue)) {
isValid = false;
if(log.isInfoEnabled()){
log.info(" 获得的参数url为: empty");
log.info(" 系统取得的url为:"+ currentURI);
log.info("系统提示:请求可能来自外域!");
}

} else {
if(log.isInfoEnabled()){
log.info("获得的参数长度为:"+tmpHeaderValue.length());
}
tmpHeaderValue = tmpHeaderValue.toLowerCase();
servername_str = servername_str.toLowerCase();

int len = 0;
if (tmpHeaderValue.startsWith("https://")) {
len = 8;
} else if (tmpHeaderValue.startsWith("http://")) {
len = 7;
}

if(log.isInfoEnabled()){
log.info("截取前的字符串为:" + tmpHeaderValue );
log.info( "从第 " + len + " 位开始截取,截取长度为:" + servername_str.length());
}
String tmp = tmpHeaderValue.substring(len, servername_str.length() + len);
if(log.isInfoEnabled()){
log.info("截取后的字符串为:" + tmp);
}
if (tmp.length() < servername_str.length()) { // 长度不够
isValid = false;
if(log.isInfoEnabled()){
log.info("截取后的字符串长度不够,请求可能来自外域!");
}
} else if (!tmp.equals(servername_str)) {// 比较字符串(主机名称)是否相同
isValid = false;
if(log.isInfoEnabled()){
log.info("域名匹配失败,请求来自外域!");
}
}
}


// 跳过指定需要拦截的页面地址
for (String ignoreURI : ignoreURIS) {
if(currentURI.contains(ignoreURI)){
isValid=true;
if(log.isInfoEnabled()){
log.info("系统已跳过检查以下url:"+currentURI);
}
}
}

if (!isValid) {

if(log.isInfoEnabled()){
log.info("系统提示信息:URL为跨域请求,即将重定向到首页。 ");
}
response.sendRedirect("/index.html");
} else {
arg2.doFilter(arg0, arg1);
}
}

public void init(FilterConfig arg0) throws ServletException {

}

}

    
 
 

您可能感兴趣的文章:

  • 如何防止IE缓存jsp文件
  • 一个可以防止刷新的JSP计数器
  • jsp怎么取<a href=/tech-java/___/id1/value/gt;提交的id1的值.html
  • 一个框界网爷包含上下两个网页a1.jsp和a2.jsp,怎么实现a1.jsp自身不变且提交数据到下面的a2.jsp呢?不胜感激,急..
  • 如何提交下拉框控件的值到jsp页面,我用的是连接传递参数的方式,而不是表单提交,大家快帮忙。
  • jsp提交表单时怎样区分多个submit?
  • 怎样利用JAVABEAN将JSP页面提交的数据保存到数据库,请给代码好吗?谢谢!
  • 在制作的留言簿上提交jsp的源代码的问题,
  • JSP网页向SQLSERVER同时提交7万多字,怎么实现!
  • 如何通过其他网站发送短消息(比如新浪)?JSP页面提交,高分请教!!
  • response.sendRedirect("index.jsp") 和 <jsp:forward page="index.jsp"/>的区别? iis7站长之家
  • 怎么能把from中提交的东西当成jsp程序执行?
  • jsp无法提交nicEdit中的内容的解决方法
  • 请教在Servlet中如何取得JSP中提交的radio对象和checkbox的值?
  • 比较菜鸟的问题我怎么在jsp或javabean中得到前面提交过来的那一页的URL
  • 得分套餐(32分):8。用TOMCAT时JSP表单提交信息给SERVLET处理时,“FORM ACTION=”后的SERVLET文件路径写什么?
  • 在JSP页面中要如何接收FORM表单提交的表元数组,请高手指点
  • JSP高手请进:如何才能把表单中提交的值传递到存储过程中的参数中?
  • 关于jsp中form提交和中文传参问题
  • 怎么用jsp向oracle8提交长字符(15000字左右)?
  • 怎样利用html中的超链接来执行一个servlet或者提交该页面上的数据给一个JSP
  • 请教:如何在一个页面提交的.jsp中根据条件需要什么也不改变。(一定加分)
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • jsp显示server数据库的内容,如何实现定时更新jsp页面
  • 帮帮新手,jsp面向对象吗?想把c/s结构的引用用jsp改写,交互功能可以实现吗
  • 请问在jsp中如何实现相对路径?我在jsp文件中指定相对路径的文件,可是程序找不到!
  • 怎么用Jsp实现在页面实现树型结构?
  • ******"Servlet根据JSP视图的需求生成JavaBeans的实例并输出给JSP环境"如何实现上面这句话的效果??*******
  • 在ASP中可以轻易实现,不知道在JSP中能否实现?
  • 在jsp中如何实现页面的重新指向?
  • 在JSP中如何实现重新定向到其他页面?
  • 在JSP中如何实现MD5加密?
  • 怎么实现jsp中的页面跳转
  • JSP调用EJB如何实现耦合度最底
  • JSP的SESSION能存贮数组吗?我想实现“购物车”功能?
  • 〔help〕有关JSP实现注册用户中的类型问题?
  • 求助:用JSP实现统计来访人数,请问怎样实现?
  • 调试jsp的时如何实现像asp中的response.end的效果
  • 在jsp 中如何实现像asp 中的页面弹出式的菜单
  • ****怎样在局域网里实现JSP的访问!!!!******************
  • jsp实现点击help打开chm文件
  • JSP中如何实现动态select选项框?
  • 那位高手知道怎样实现用JSP跟ORACLE连上?
  • JSP中清空cookie代码参考
  • 现有1.jsp、2.jsp、3.jsp三个文件,我怎么在3.jsp文件中得到1.jsp中输入的值?
  • 请问jsp和serlet之间怎么通讯,jsp和jsp之间呢?
  • 请问<%@include file="abc.jsp"%>与<jsp:include page="abc.jsp"/>之间的差别
  • response.sendRedirect("index.jsp") 和 <jsp:forward page="index.jsp"/>的区别?
  • 想把一个jsp转到另一个jsp页面,要穿参数,中文的(jsp变量)。谁教教我?!
  • aaa.jsp有如下链接,当单击该链接时将id值传递给bbb.jsp,怎样在bbb.jsp中引用这个id值?
  • jsp+bean还是jsp+ejb还是jsp+servlet还是asp+activex好?
  • 谁能告诉我,怎么调试jsp程序呀!我在jsp中调用java,但是Tomcat这家伙只会给我报jsp文件出错。这可怎么办呀?
  • jsp中如何获得当前jsp文件所在的目录,用request.getServletPath()得到的路径含有jsp文件名,有没有办法得到目录(不含文件名)?
  • 初学jsp,一个html调用一个jsp,这个jsp调用一个javaBean,已编译成类,最后如何部署(用j2sdkee)?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3