当前位置: 首页 > 面试题库 >

使用Spring MVC和Jackson Mapper进行HTML转义

庞鸿骞
2023-03-14
问题内容

我将与Jackson Jackson一起在Spring MVC中转义HTML,以避免XSS攻击。

我只搜索杰克逊的转义,以及如何在spring配置杰克逊。
我试图出口JSON包含“<”“>文本”,我希望他们逃脱&#60;&#62;

例如我加入附带一些文本“粗体标签<b>,我希望看到的是纯黑体标记文字前端HTML,但最终文本在前端html页面中以粗体显示。

下面是我的方法,我不知道为什么它没有解决。

有人可以帮忙吗?

提前致谢!

public class CustomObjectMapper extends ObjectMapper {  
    public CustomObjectMapper() {
        this.getJsonFactory().setCharacterEscapes(new CustomCharacterEscapes());
    }
}

public class CustomCharacterEscapes extends CharacterEscapes {
    private final int[] asciiEscapes;

    public CustomCharacterEscapes() {
        int[] esc = CharacterEscapes.standardAsciiEscapesForJSON();
        esc['<'] = CharacterEscapes.ESCAPE_STANDARD;
        esc['>'] = CharacterEscapes.ESCAPE_STANDARD;
        esc['&'] = CharacterEscapes.ESCAPE_STANDARD;
        esc['\''] = CharacterEscapes.ESCAPE_STANDARD;
        asciiEscapes = esc;
    }

    @Override
    public int[] getEscapeCodesForAscii() {
        return asciiEscapes;
    }

    @Override
    public SerializableString getEscapeSequence(int ch) {
        return null;
    }
}







<bean
    class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="messageConverters">
        <array>
            <bean id="jsonConverter"
                class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
                <property name="objectMapper">
                    <bean class="x.y.z.CustomObjectMapper" />
                </property>
            </bean>
        </array>
    </property>
</bean>

`


问题答案:

我从未尝试编写自己的HttpMessageConverter。在查看他们的解决方案与您在此处发布的内容时,我可以说我注意到的最大差异是您似乎没有实现/覆盖以下内容:

  1. protected boolean support(Class clazz),它指示您正在支持的类类型(如果您希望它具有足够的通用性来处理各种可能性,或者我的域对象特定于某个类,那么我会确认这是Object或Serializable )
  2. 受保护的对象readInternal(Class clazz,HttpInputMessage inputMessage),看起来像用于请求方
  3. 受保护的void writeInternal(Object t,HttpOutputMessage outputMessage),看起来像它用于响应端

另一种方法可能是与@ResponseBody一起简单地创建自定义Jackson序列化程序。或者,更好的是,如果您拥有一个由用户驱动的值,并将其存储在数据库中,请在插入之前对这些值进行转义。这样,您根本不需要执行任何操作,并且所讨论的值从端到端都是“安全的”。如果您想疯了,可以编写一个自定义的java.beans.PropertyEditor,它转义HTML的Strings并使用InitBinder将其插入到混合中。

最后,我想建议您,而不是尝试自己替换字符,而是使用类似Apache Commons-
Lang
的StringEscapeUtils的值进行转义。



 类似资料:
  • 本文向大家介绍springmvc使用JSR-303进行数据校验实例,包括了springmvc使用JSR-303进行数据校验实例的使用技巧和注意事项,需要的朋友参考一下 项目中,通常使用较多的是前端的校验,比如页面中js校验以及form表单使用bootstrap校验。然而对于安全要求较高点建议在服务端进行校验。 服务端校验: 控制层controller:校验页面请求的参数的合法性。在服务端控制层co

  • 问题内容: 将[]字节传递到模板中,作为论坛风格的Web应用程序上的消息发布的正文。在模板中,调用一个方法以转换为字符串,并一路切换所有换行符以换行: … 最终结果是: 我不想用HTML(p.Body)传递整个帖子,因为它表示来自潜在不可靠来源的第三方数据。有没有一种方法可以使用Vanilla Go1模板包将仅某些标签用于格式设置白名单? 问题答案: 我确实认为您想解析HTML。exp / htm

  • 问题内容: 我正在尝试建立 Spring MVC + Hibernate 项目,但是这让我发疯了。我还将考虑建议订购xml配置文件的建议。 我有以下文件: 我收到此stacktrace错误: 另外,如果有人可以给我一些提示以帮助我组织xml配置文件,我将非常高兴。我是.NET开发人员,所有这些Maven + xml配置对我来说都是新的东西。 谢谢 问题答案: 我的解决方案是将Datasource中

  • 我想将XMl转换为另一种XMl格式。假设我在ats中有一个逻辑。埃姆沃。使改变TransformXml java文件如何集成以在camel上下文输入中转换tis(file:///d:/in)是xml文件,我想将其另存为xml。我已经将此文件作为bean类添加到camel

  • 我现在正在使用最新的Android架构组件,尤其是ViewModel和LiveData。 我遇到的情况是,这里建议的SingleLiveEvent是相关的,即我返回一个错误,我只想显示一次警报。在向活动发送值之前,我需要将错误映射到视图中更合适的对象。我使用了一个转换来实现这一点。 最后,我有一个ViewModel,看起来像: 在我的存储库中,我使用的是SingleLive事件: 这很有效,但我注

  • 我正在尝试使用JOLT(使用NiFi JoltTransformJson处理器)将JSON转换为不同的格式。对于单个JSON记录,正在使用的JOLT在JOLT应用程序演示中运行良好,而如果我使用多个JSON记录执行,那么我在JOLT应用程序演示中没有得到预期的输出。有人能告诉我在JOLT规范中需要做哪些额外的更改来处理多个JSON记录吗? 示例输入json JOLT使用: 预期输出JSON:

  • 问题内容: 我已经在SO中阅读了一些关于答案的问题,这些问题与JSON属性之间的序列化和反序列化有关,但我似乎无法使其正常工作。 我已经设法将Spring Boot应用程序配置为以所需的格式()返回日期,但在以JSON格式接收值时遇到问题。 这些是我到目前为止所做的所有事情: 增加了对Maven的依赖: 在我的主要课程中指定: 禁用序列化作为时间戳记: 这是我的日期时间实体映射: 在我的数据库中,

  • 我正在学习springsecurity(基于java的配置),我无法使注销正常工作。当我点击注销时,我看到URL更改为http://localhost:8080/logout并获取“HTTP 404-/logout”。登录功能工作正常(即使使用自定义登录表单),但问题是注销,我怀疑重定向的url“localhost:8080/logout”应该类似于“localhost:8808/springte