您好!欢迎来到源码码网

org.xml.sax.SAXParseException; lineNumber: 4; columnNumber: 55; 外部 DTD: 无法读取外部 DTD ’maybtis-3-mapper.dtd’, 因为 accessExternalDTD 属性设置的限制导致不允许 ’http’ 访问

  • 源码教程
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2025-04-19 23:43
  • 阅读:548

针对因accessExternalDTD属性限制导致无法通过HTTP访问外部DTD(如MyBatis的mybatis-3-mapper.dtd)的问题,以下是详细的解决方案:


问题原因

Java XML解析器默认禁止从外部加载DTD(防止XXE攻击),因此当XML文件尝试通过HTTP访问远程DTD(如<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">)时,会抛出以下错误:

org.xml.sax.SAXParseException: 外部 DTD: 无法读取外部 DTD 'mybatis-3-mapper.dtd', 
因为 accessExternalDTD 属性设置的限制导致不允许 'http' 访问

解决方案

根据需求选择以下任意一种方法:

1. 在代码中配置XML解析器(推荐)

在创建DocumentBuilderSAXParser时,显式允许访问HTTP协议的DTD:

import javax.xml.XMLConstants;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

public class XmlParser {
    public static void main(String[] args) {
        try {
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            
            // 关键配置:允许通过HTTP访问外部DTD
            factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "http");
            
            DocumentBuilder builder = factory.newDocumentBuilder();
            builder.parse("input.xml"); // 解析XML文件
        } catch (ParserConfigurationException | SAXException | IOException e) {
            e.printStackTrace();
        }
    }
}

2. 通过JVM参数全局配置

在启动应用时添加以下参数,允许所有XML解析器访问HTTP/HTTPS协议的外部DTD:

java -Djavax.xml.accessExternalDTD=http,https -jar YourApp.jar

3. 使用本地DTD文件(安全推荐)

避免依赖远程DTD,将mybatis-3-mapper.dtd下载到本地,并修改XML的DOCTYPE声明指向本地路径:

  1. 下载DTD文件
    访问 http://mybatis.org/dtd/mybatis-3-mapper.dtd 并将文件保存到项目目录(如
    src/main/resources/dtd/mybatis-3-mapper.dtd)。

  2. 修改XML声明
    将XML中的DOCTYPE路径替换为本地路径:

  3. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
        "classpath:/dtd/mybatis-3-mapper.dtd">

    4. 完全禁用DTD(极端情况)

    如果无需DTD验证,可直接禁用外部实体解析:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); // 启用安全处理
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); // 禁用DOCTYPE

注意事项

  1. 安全风险
    允许外部DTD访问可能引发XXE攻击,确保仅加载可信来源的DTD。

  2. 兼容性
    部分旧版XML解析器(如Apache Xerces 1.x)可能不支持
    ACCESS_EXTERNAL_DTD属性,建议升级到较新版本。

  3. MyBatis框架集成
    若在MyBatis中遇到此问题,建议优先使用本地DTD文件,避免因网络问题导致解析失败。


这里建议使用第三种方法,比较简单,也安全可靠!


特别声明:
1、如无特殊说明,内容均为本站原创发布,转载请注明出处;
2、部分转载文章已注明出处,转载目的为学习和交流,如有侵犯,请联系客服删除;
3、编辑非《源码码网》的文章均由用户编辑发布,不代表本站立场,如涉及侵犯,请联系删除;
全部评论(0)
推荐阅读
  • 设备全生命周期智能巡检管理系统
  • 设备全生命周期智能巡检管理系统
  • 一、项目概述项目名称:设备全生命周期智能巡检管理系统核心目标:通过一机一码(二维码)标准化巡检流程,确保不漏检、不错检。建立并维护每台设备的完整数字档案(涵盖基础信息、巡检、维修、保养全记录)。实现故障的快速上报、跟踪与闭环处理。将线下纸质记录电子化、流程化,实现数据可追溯、可分析。目标用户:现场巡检/操作人员:使用移动端进行日常巡检与记录。设备管理员/维修工程师:处理故障、执行维修保养、管理设备状态。部门主管/管理层:查看报
  • 行业资讯
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2026-01-06 11:31
  • 阅读:76
  • 同城跑腿预约系统功能需求文档
  • 同城跑腿预约系统功能需求文档
  • 1.文档概述项目名称:同城跑腿预约系统核心目标:为用户提供便捷、可靠的同城即时物品取送、代办服务,并为服务提供者(师傅)提供高效的订单匹配与管理工具,实现线上线下服务闭环。目标用户:用户端:有物品取送、购买、代办需求的个人及企业用户。师傅端:提供跑腿服务的骑手、司机或自由职业者。核心价值:便捷预约、智能调度、全程追踪、安全可靠。2.总体业务流程用户发布订单 -> 系统智能派单/师傅抢单 
  • 行业资讯
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2026-01-06 11:18
  • 阅读:206
  • 百度搜索垃圾广告霸屏,市场份额被蚕食?
  • 百度搜索垃圾广告霸屏,市场份额被蚕食?
  • 进入2026年,随着AI的崛起,中国传统搜索引擎市场的用户占比和竞争格局发生着明显的改变。需要强调的是,传统“搜索”的定义正在被颠覆,分析必须从“搜索行为”和“流量入口”两个维度来看。核心结论百度依然是综合搜索的龙头,但份额持续被蚕食,市场已从“一家独大”变为“一超多强”。“搜索去中心化”是最大趋势。越来越多用户,尤其是年轻群体,不再打开百度,而是直接在抖音、微信、淘宝、小红书等超级App内进行“站内搜索”来获取信息、商品和服务。微软必
  • 行业资讯
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2026-01-06 10:56
  • 阅读:184
  • AI编程对当前程序员就业环境的影响:挑战、机遇与未来重塑
  • AI编程对当前程序员就业环境的影响:挑战、机遇与未来重塑
  • 一、影响全景:行业正在经历“技术性重构”直接冲击领域基础代码生成:重复性编码任务(如CRUD操作、简单API开发)效率提升50-80%代码审查与调试:AI辅助定位bug、优化代码结构,减少人工排查时间文档与测试:自动生成技术文档、测试用例成为新常态入门级岗位需求变化:对初级程序员“代码搬运”能力需求下降,更重问题分析与架构理解数据对比(2023-2024行业调查)使用AI工具的开发者任务完成速度平均提升35%63%的企业调整了初级工程师
  • 行业资讯
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2026-01-06 10:41
  • 阅读:225
  • SSL证书有哪些类型,应该如何选择
  • SSL证书有哪些类型,应该如何选择
  • SSL证书根据验证级别、保护域名数量和功能特性主要分为以下几类。选择合适的证书需综合考虑安全需求、预算、品牌形象和技术兼容性。一、SSL证书的主要类型1.按验证级别分类(从低到高)2.按保护域名数量分类3.按证书功能/特性分类标准SSL证书:基础加密功能。代码签名证书:用于软件/代码签名,验证开发者身份(如Windows驱动、APP)。邮件证书(S/MIME):加密和签名电子邮件。客户端证书:用于双向认证(如VPN、企业内网)。二
  • 行业资讯
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2026-01-06 10:35
  • 阅读:143
联系客服
源码代售 源码咨询 素材咨询 联系客服
029-84538663
手机版

扫一扫进手机版
返回顶部