现在做的项目之前没有考虑到js注入的问题,现在想通过在spring对数据进行绑定时,去除html标签来在后端防止js注入,首先先研读它的源码,我们大部分controller都是扩展MultiActionController这个类,用到的是bind(HttpServletRequest request, Object command)这个方法,它是通过调用createBinder方法创建ServletRequestDataBinder类来进行数据绑定,ServletRequestDataBinder类里面的getInternalBindingResult方法就是返回绑定的结果,我们可以在这方法里面加上自己的属性编辑器(扩展PropertyEditorSupport类)对参数进行处理,于是实现的步骤是:1、写个扩展PropertyEditorSupport类的字符串处理类
2、定义自定义ServletRequestDataBinder,重写getInternalBindingResult方法,3、扩展MultiActionController,重写createBinder方法。
1.StringEditor类
public class StringEditor extends PropertyEditorSupport{
@Override
public void setAsText(String text) throws IllegalArgumentException {
if (text == null || (text = text.trim()).length() == 0) {
return;
}
try {
//去除html标签
String str = text.replaceAll("<[a-zA-Z]+[1-9]?[^><]*>", "")
.replaceAll("</[a-zA-Z]+[1-9]?>", "");
setValue(str);
} catch (Exception e) {
throw new IllegalArgumentException(e);
}
}
}
2.CustomRequestDataBinder类
public class CustomRequestDataBinder extends ServletRequestDataBinder {
public CustomRequestDataBinder(Object target) {
super(target);
}
public CustomRequestDataBinder(Object target, String objectName) {
super(target, objectName);
}
@Override
protected AbstractPropertyBindingResult getInternalBindingResult() {
AbstractPropertyBindingResult bindingResult = super.getInternalBindingResult();
PropertyEditorRegistry registry = bindingResult.getPropertyEditorRegistry();
registry.registerCustomEditor(String.class, new StringEditor());
return bindingResult;
}
}
3.CustomMultiActionController 类
public class CustomMultiActionController extends MultiActionController{
@Override
public ServletRequestDataBinder createBinder(HttpServletRequest request, Object command) throws Exception {
CustomRequestDataBinder binder = new CustomRequestDataBinder(command, getCommandName(command));
initBinder(request, binder);
return binder;
}
}
这样的话只要你的Controller扩展了CustomMultiActionController ,在进行数据绑定时就会把提交的数据中的html标签去除,如果某些属性需要有html标签的话就通过request.getParameter来获取没转换的数据。
这只是一个简单的例子,你还可以扩展其它的属性编辑器,比如时间格式的,在提交时统一把date转换为某种格式保存。
分享到:
相关推荐
Spring MVC 数据绑定大全是指 Spring MVC 框架中提供的一种强大的数据绑定机制,通过 PropertyEditor 机制可以实现多种数据类型的绑定。开发者可以根据需要注册自定义的 PropertyEditor,以实现特定的数据绑定需求。
如果Spring MVC的默认行为不能满足需求,可以通过实现`org.springframework.web.bind.WebDataBinder`的初始化方法`initBinder()`来自定义数据绑定的行为,例如设置特定属性的约束或自定义转换器。 ```java @...
3. **默认配置不当**:Spring MVC的默认配置可能允许过于宽松的数据绑定,例如允许空值绑定到非null字段,或者允许任意类型的参数绑定。 针对这些风险,开发者可以采取以下措施来增强Spring MVC应用的安全性: 1. *...
"Spring MVC数据绑定大全.rar"这个压缩包很可能包含了全面讲解Spring MVC数据绑定技术的资料,如"Spring MVC数据绑定大全.pdf"。下面将详细阐述Spring MVC数据绑定的关键知识点。 1. **注解驱动的数据绑定**:...
以下是对Spring MVC数据绑定的深入解释: **数据绑定概述** 在Spring MVC中,数据绑定是通过`DataBinder`组件实现的。当一个HTTP请求到达控制器方法时,Spring MVC会自动创建一个`DataBinder`实例,并使用`...
Spring MVC 是一个基于Java的轻量级Web应用框架,它为开发者提供了模型-视图-控制器(MVC)架构,使开发人员能够更好地组织和分离应用程序的业务逻辑、数据处理和用户界面。Spring MVC是Spring框架的一个核心组件,...
在Spring MVC中,对于如int、String等基本数据类型的请求参数,Spring MVC会自动将其与控制器方法的参数进行匹配和绑定。例如,一个GET请求中的查询参数`id=123`会被自动绑定到控制器方法的`int id`参数上。 2. **...
总的来说,"Mastering Spring MVC 4(2015.09)源码"提供了深入学习Spring MVC的机会,你可以通过阅读和分析源码来了解如何配置DispatcherServlet、怎样编写控制器、如何进行数据绑定与验证,以及如何利用拦截器等特性...
这些标签是Spring Web MVC模块的一部分,能够与Spring的模型绑定机制无缝集成,简化了前端到后端的数据传递。 113.9.1. **配置** 在使用Spring的表单标签库之前,需要在JSP页面中引入Spring的Taglib。这通常在页面...
Spring MVC还支持数据绑定,自动将请求参数绑定到Java对象,这极大地简化了表单提交的处理。对于验证,Spring MVC提供了BindingResult和Validator接口,用于校验模型数据的正确性。 另外,Spring MVC与Spring框架的...
6. **数据绑定与验证**:Spring MVC提供了数据绑定和验证功能,允许将表单数据自动绑定到Java对象,并进行校验,简化了业务逻辑处理。 7. **视图解析**:Spring MVC 4.0支持多种视图技术,如JSP、FreeMarker、...
5. **数据绑定和验证**:Spring MVC提供强大的数据绑定功能,将HTTP请求参数自动映射到处理方法的参数,并支持JSR-303/JSR-349 Bean Validation标准进行数据验证。 6. **异常处理**:通过定义全局异常处理器,可以...
1.创建第一个 Spring MVC 程序案例 ...11.Spring MVC 数据绑定案例 12.Spring MVC 实现 JSON 数据返回案例 13.Spring MVC 文件的上传与下载案例 14.Spring MVC 拦截器案例 15.Spring MVC 异常处理案例
除此之外,Spring MVC还支持数据绑定、验证、本地化、主题、异常处理等功能。例如,使用@ModelAttribute注解可以将请求参数绑定到Controller方法的参数上,@Valid用于进行数据验证,Validator接口可以自定义验证逻辑...
总的来说,这个项目结合了Spring MVC的强大后端处理能力,利用Jackson进行高效的JSON数据交换,以及jQuery和JavaScript实现富前端交互,提供了一种高效的Web应用开发方案。通过熟练掌握这些技术,开发者可以构建出...
### Spring MVC 处理 XSS 和 SQL 注入攻击的方法总结 #### 一、引言 在 Web 开发领域,特别是基于 Java 的应用开发中,Spring MVC 框架因其灵活高效的特点而被广泛采用。然而,随着互联网技术的发展,网络安全问题...
- 如果有错误,Spring MVC会自动将错误信息绑定到模型中,然后返回到表单页面,`<form:errors>`标签会显示这些错误。 - 如果一切正常,控制器会处理数据并重定向到新的页面或者更新视图。 4. **表单标签实例** ...
这是一个基于Spring MVC、Mybatis和Spring框架实现的个人博客系统,涵盖了Web开发中的后端架构设计、数据库管理和前端展示等多个方面。以下将详细介绍这个系统的关键知识点: **1. Spring MVC** Spring MVC是Spring...
全书共计12章,分别从Spring框架、模型2和MVC模式、Spring MVC介绍、控制器、数据绑定和表单标签库、传唤器和格式化、验证器、表达式语言、JSTL、国际化、上传文件、下载文件多个角度介绍了Spring MVC。除此之外,...