Java 在spring mvc中转义特定字符串

Java 在spring mvc中转义特定字符串,java,spring,spring-mvc,xss,jackson,Java,Spring,Spring Mvc,Xss,Jackson,我正在使用SpringMVC(Spring3.1.0)。 由于XSS,我想对系统中输出的每个字符串进行html编码。 但是有些输出(比如链接)我不想以这种方式编码——为了做到这一点,我决定使用ContextualSerializer并创建一个实现它的类。 方法createContext检查是否存在自定义注释(@NoHTMLEscap),并确定要返回的JsonSerializer 这是我的注解: @Target({ElementType.FIELD, ElementType.METHOD, Ele

我正在使用SpringMVC(Spring3.1.0)。
由于XSS,我想对系统中输出的每个字符串进行html编码。
但是有些输出(比如链接)我不想以这种方式编码——为了做到这一点,我决定使用
ContextualSerializer
并创建一个实现它的类。
方法
createContext
检查是否存在自定义注释(
@NoHTMLEscap
),并确定要返回的
JsonSerializer

这是我的注解:

@Target({ElementType.FIELD, ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotation
public @interface NoHTMLEscap {
}
我试过了,效果非常好——在Pojo上,但有一个案例失败了:

@Controller
@RequestMapping(value = "/something")
public class MyController {

    ...

    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
    @ResponseBody
    @ResponseStatus(value = HttpStatus.OK)
    public String getName(@PathVariable String id) {
         return "Here is your answer";
    }
}
Spring将返回的值发送给jackson,由于此方法返回的是
String
,而不是POJO-无法检查注释的存在性-因此我无法在那里实际使用注释

有没有办法将此信息发送到Jackson的序列化程序?

我不确定,但我想也许我需要使用一个特定于spring的转换器,它永远不会转义字符串(不确定这是否能正确解决我的问题以及如何实现)?

我认为jackson不能为您的用例提供一个简单的实际解决方案,但我可以建议一个不同的解决方案。
如果您能够在这些字符串周围拥有一个包装器对象,比如LinkWrapper,那么您可以添加LinkWrapper的另一个序列化程序,该序列化程序将只委托给您当前的序列化程序。在LinkWrapper对象中,您将使用注释对字符串进行注释,因此您的委托的序列化程序将对其进行非编码序列化。
此外,您的输出不会是对象的输出,因为您的自定义序列化程序只委托给字符串序列化程序的输出。
如果您需要一个代码示例,只需说,但我认为这是一个非常简单的组合案例