解决教学平台上文件中存在无扩展名BUG的办法

Jfinal中添加过滤器声明

    public void configHandler(Handlers me)
    {
        me.add(new XssHandler());
    }
    

过滤器

package com.demo.common.config;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.jfinal.handler.Handler;

/**
 * 统一XSS处理
 */
public class XssHandler extends Handler
{

    @Override
    public void handle(String target, HttpServletRequest request,
                       HttpServletResponse response, boolean[] isHandled)
    {

        System.out.println(target);

        if(target.equals("/css/2222"))
        {
            String abc=target.replaceAll("/", "\\\\"); //这里是为什么要加4个???\\\\
            String path="C:\\Users\\Administrator\\Desktop\\jfinal_demo\\WebRoot"+abc;
            try {
                response.setHeader("Content-Type","application/octet-stream");
                response.setHeader("content-disposition", "attachment;filename=" +
                        URLEncoder.encode("2222", "UTF-8"));

                     InputStream in = null ;
                    OutputStream out = null ;
                    try
                    {
                       in = new FileInputStream(path); //获取文件的流
                       int len = 0;
                       byte buf[] = new byte[1024];//缓存作用
                       out = response.getOutputStream();//输出流
                       while( (len = in.read(buf)) > 0 ) //切忌这后面不能加 分号 ”;“
                       {
                           out.write(buf, 0, len);//向客户端输出,实际是把数据存放在response中,然后web服务器再去response中读取
                       }
                    } catch (FileNotFoundException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }finally
                    {
                        if(in!=null)
                        {
                          try{
                              in.close();
                          }catch(IOException e){
                             e.printStackTrace();
                           }
                        }  

                        if(out!=null)
                        {
                           try{
                               out.close();
                           }catch(IOException e){
                               e.printStackTrace();
                            }
                         }
                     }  

            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        //System.out.println("target -> " + target);
        // 对于非静态文件,和非指定排除的url实现过滤
        /*
        if (!target.contains(".") && !target.startsWith(exclude))
        {
            System.out.println("target -> " + target);
            request = new HttpServletRequestWrapper(request);
        }
        nextHandler.handle(target, request, response, isHandled);*/
    }
}
时间: 2024-12-20 22:17:07

解决教学平台上文件中存在无扩展名BUG的办法的相关文章

iis5.1/6.0/7.0+ 配置url重写 无扩展名伪静态

最近在搞url重写 遇到iis 无扩展名及html映射问题 供后人查看 因为考虑功能比较多(URLRewriter组件有些功能满足不了要求)所以就用了HttpModule方法重写 iis5.1中 添加应用程序映射 .* (注意 这种方法只有5.1中可以)到 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll 确定文件是否存在去掉 即可 iis6.0中 搜了大量文章 都不可以 ,终于看到一篇文章 在通配符应用程序映射插入is

Gulp解决发布线上文件(CSS和JS)缓存问题

本文的缘由:目前经常线上发布文件后要不断的刷新页面及过很长时间,页面上的CSS和JS文件才能生效,特别对于目前做微信商城的时候,微信内置的浏览器缓存非常的严重,之前我们经常是在文件后面加上时间戳的方式来解决线上发布后的缓存问题,但是在微信浏览器内并不生效:因此我们需要改变文件名的方式来解决缓存的问题,因此使用后缀名加上MD5一连串的字符串来解决缓存的问题: 我们先可以考虑这么一个功能,我在页面上引用css文件如下: ./css/xx.css ./js/xx.js 我现在想通过使用MD5重新命名c

解决在读取properties文件中出现中文报错问题

// 读取properties中的参数 Properties properties = new Properties(); // 读取properties文件 使用InputStreamReader来解决中文报错问题 InputStreamReader inputStreamReader = null; // InputStream inputStream = Main.class.getResourceAsStream("/file.properties"); // 需要遍历的路径

解决:"不再sudoers文件中,此事将不做被报告”的问题

使用sudo出现问题:不再sudoers文件中,此事将不做被报告 系统:win8.1 +cents 7 问题:在虚拟机中,默认不是root账号,在使用sudo命令时候收到下面警告: sudo命令含义:使用sudo命令的账号,拥有root账号的权限来执行某些命令或者程序,但不是所有的帐号都可以使用sudo命令,我们要做的就是切换到root账号,用root身份来修改和管理文件,這个文件是 /etc/sudoers. 执行命令: 找到到如下行,用vim编辑此文档添加自己的账号,你本linux的用户名,

解决SharePoint下载文件时自动修改扩展名的问题

今天,有人告诉了我一个有趣的问题.当用户将一个扩展名为.ai的文件(Adobe illustrator格式的文件)上载到SharePoint 2013文档库中之后,点击它下载时,下载提示栏所显示的文件名的扩展名,却被修改为了.ps. ? ? 这是一个挺有意思的问题.要解决它,请按照下面的步骤在SharePoint服务器上进行配置即可. ? 第一步:让SharePoint识别.ai文件 ? 嗯,实际上,第一步对于解决上面所说的问题,并不是必需的,你完全可以直接跳到第二步.但是这个步骤可以让Shar

sqlite 查询db文件中所有的表名

语法:SELECT * FROM sqlite_master WHERE type='table'; 可以列出当前db文件中所有的表的表名.结构如下: 注:网上有人说可以带上db文件的名称,如:SELECT * FROM dbname.sqlite_master WHERE type='table'; 但我试了不行...难道我姿势不对~

[原]visual studio 将(无扩展名)文件以某种(C++)方式阅读(映射)

工具 选项 文本编辑器 文件扩展名 选择"将无扩展····"后面设置一下就可以

谷歌浏览器中安装.crx扩展名的离线Chrome插件

一.本地拖放安装 1.下载扩展程序/脚本程序至本地计算机: 2.将其直接拖拽到浏览器的“扩展程序”(chrome://chrome/extensions/)页面. 二.解决“只能通过Chrome网上应用商店安装该程序” 由于一些特殊原因,极个别Chrome插件在使用上述的安装方法的时候,Chrome会提示“只能通过Chrome网上应用商店安装该程序”. 具体的操作方法如下: 1.把下载后的.crx扩展名的离线Chrome插件的文件扩展名改成.zip或者.rar(如果看不到Chrome插件的扩展名

怎么在谷歌浏览器中安装.crx扩展名的离线Chrome插件?

在用户使用谷歌浏览器安装Chrome插件的时候,如果网络状态允许或者用户直接在谷歌提供的服务中获取的Chrome插件,就可以点击其提供的一键跳转按钮直接根据提示安装到Chrome浏览器中,这种安装Chrome插件的方式最为简单,但是要求用户的网络状态良好,并且用户可以从谷歌的相关服务中获取Chrome插件的下载链接. 但是大多数情况我们的网络状态都不会允许我们这么做的,那我们更加不可能直接获取Chrome插件在谷歌服务中的下载链接了,用户只能通过在其他网站上下载(如:Chrome插件网),或者用