`
yaerfeng1989
  • 浏览: 233865 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

整合Spring MVC,mybatis,hibernate,freemarker框架实现的自定义注解Validator验证机制实现对敏感词过滤的代码分享

阅读更多

 原创整理不易,转载请注明出处:整合Spring MVC,mybatis,hibernate,freemarker框架实现的自定义注解Validator验证机制实现对敏感词过滤的代码分享

代码下载地址:http://www.zuidaima.com/share/1755786415246336.htm

 

  服务器端的数据验证,对于一个WEB应用来说是非常重要的,而Spring从3.0开始支持JSR-303规范,它定义了一些标准的验证约束,同时也提供了一个可扩展的自定义方式来满足不同的开发需要,大象以SSM3为基础,结合实例来说明如何通过Spring MVC用自定义约束注解的方式来实现Validator验证。
    在实现功能之前,我们需要在pom文件里添加一些必须的依赖:    

		<dependency>
			<groupId>javax.validation</groupId>
			<artifactId>validation-api</artifactId>
			<version>1.0.0.GA</version>
		</dependency>
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-validator</artifactId>
			<version>4.0.2.GA</version>
		</dependency>

validation-api 是 JSR-303 规范的标准接口, hibernate-validator 则是这套接口的一个实现,而 hibernate-validator 的实现里面又会用到 slf4j ,所以还需要加上这两个 jar 包。有了这些,我们就可以在此基础上实现自定义注解约束扩展了。

本篇还是以 SSM3 为基础,以对角色名称添加屏蔽词为例来说明如何实现这些功能。
首先需要定义这样一个屏蔽词注解:

@Documented
@Constraint(validatedBy = {WordsValidator.class})
@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER})
@Retention(RUNTIME)
public @interface Words {
	
	String message() default "{constraint.default.words.message}";

	Class<?>[] groups() default {};

	Class<? extends Payload>[] payload() default {};
	
	String filed() default "";
}

 

上面这个注解类,message(),groups()和payload()这三个方法是注解验证的标准格式,filed()表示验证的字段名称,{constraint.default.words.message}是从ValidationMessages.properties资源文件中获取的,这个文件的位置就在resources目录下面。
    现在定义了验证接口,就需要有处理接口的实现,WordsValidator.class就是用来处理这个的:

 

public class WordsValidator implements ConstraintValidator<Words, String> {

	@Override
	public void initialize(Words wordsAnnotation) {
	}

	@Override
	public boolean isValid(String value, ConstraintValidatorContext context) {
		if (StringUtils.isBlank(value))
			return Boolean.TRUE;
		// 此处可以加载敏感词库,不过只列举了一个
		return !StringUtils.trim(value).equals("最代码");
	}
} 

这里大象为了说明实现的方法,简化了处理,实际开发中,可以改进一下,通过使用屏蔽词库对 value 值进行过滤。下面是一个测试类,对此注解进行一个简单的测试。

@Test
public void testWords(){
	AnnotationDescriptor<Words> descriptor = new AnnotationDescriptor<Words>(Words.class);
	Words words = AnnotationFactory.create(descriptor);
	WordsValidator wordsValidator = new WordsValidator();
	wordsValidator.initialize(words);
	Assert.assertTrue(wordsValidator.isValid(null, null));
	Assert.assertTrue(wordsValidator.isValid("", null));
	Assert.assertTrue(wordsValidator.isValid("  ", null));
	Assert.assertFalse(wordsValidator.isValid("  菠萝大象    ", null));
	Assert.assertTrue(wordsValidator.isValid("大象", null));
	Assert.assertTrue(wordsValidator.isValid("   大象  ", null));
}

RoleController 的 save 方法需要加入验证以及错误处理:

 

@RequestMapping(value = "/save", method = RequestMethod.POST)
public String save(@Valid Role role, BindingResult result, Model model) {
	if (result.hasErrors()) {
		model.addAttribute("entity", role);
		model.addAttribute("error", result.getAllErrors());
		return "base/role_edit";
	}
	roleService.save(role);
	return "redirect:/role";
}

页面上想要显示验证的错误信息,最方便的就是直接使用 spring-webmvc 里的 org.springframework.web.servlet.view.freemarker 下 的 spring.ftl 文件,它里面定义了很多的宏命令,同时还可以添加自定义的宏命令:

<#macro showErrors>
	<#if error?exists>
	<script type="text/javascript">
		<#list error as e>
		$("[for='${e.field}']").show().text("${e.defaultMessage}");
		</#list>
	</script>
	</#if>
</#macro>  

role_edit.html 这个页面的变动不大,主要就是四点,具体的可以查看源码。

1 、引入并定义 < #import"/common/spring.ftl" as spring/> 

2 、在角色名 input 后面增加 < label class="error" for="name" style="display:none;"></label> 

3 、然后加入 jquery.js ,用来解析 showErrors 中的脚本 

4 、使用 < @spring.showErrors/> 

最后,要想让这些功能都能正常的运行起来,需要改下 servlet-context.xml 文件

 <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
		<property name="webBindingInitializer">
			<bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
				<property name="validator" ref="validator" />
			</bean>
		</property>
	</bean>
	
	<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />

项目截图:

项目截图

项目截图

运行截图:

首页:http://localhost:端口/项目名称/hello

首页

user_list.html

user_list.html

role_list.html

role_list.html

新增角色时有敏感词:最代码时提示出错!

数据库脚本:

use zuidaima_springmvc_validator;

CREATE TABLE `role` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT NULL,
  `sex` char(1) DEFAULT NULL,
  `edu` char(1) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of role
-- ----------------------------
INSERT INTO role VALUES ('1', '超级管理员', '1', '4');
INSERT INTO role VALUES ('2', '系统管理员', '2', '1');
INSERT INTO role VALUES ('3', '业务管理员', '1', '0');
INSERT INTO role VALUES ('4', '最代码', '1', '5');

-- ----------------------------
-- Table structure for `user`
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(20) DEFAULT NULL,
  `role_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO user VALUES ('1', '张三', '1');
INSERT INTO user VALUES ('2', '李四', '2');
INSERT INTO user VALUES ('3', '王五', '1');
1
2
分享到:
评论

相关推荐

    Struts+spring+mybatis

    在开发过程中,开发者可能还会使用到如Hibernate Validator进行数据验证,Spring AOP进行日志记录或事务管理,以及JUnit和Mockito等工具进行单元测试,以确保代码的质量和稳定性。 总之,"Struts+Spring+Mybatis"的...

    最全最经典spring-mvc教程

    另外,Spring MVC与Spring框架的其他组件无缝集成,如Spring AOP(面向切面编程)用于实现日志、事务管理等功能,Spring JDBC和MyBatis等持久层框架用于数据库操作,以及Spring Data JPA、Hibernate等ORM工具,使得...

    spring mvc+ibatis+spring注解

    这个项目展示了如何结合Spring MVC、Ibatis以及Spring注解,构建一个完整的Web应用程序,实现了数据的CRUD操作,以及分页排序查询和用户登录验证等功能,所有这些都基于非XML的配置方式,利用注解提高了开发效率和...

    spring mvc框架需要用到的jar包

    在搭建Spring MVC项目时,根据实际需求,可能还需要添加其他的库,如数据库驱动、ORM框架(如Hibernate或MyBatis)、模板引擎(如Thymeleaf或FreeMarker)等。每个jar包都扮演着不可或缺的角色,共同构建出一个完整...

    Spring MVC 框架学习总结

    15. **验证**:Spring 提供了 Hibernate Validator,可以在 Controller 方法上进行数据验证。 16. **异步处理**:通过 @Async 和 TaskExecutor,Spring MVC 支持非阻塞的异步请求处理。 17. **测试**:Spring MVC ...

    java web开发spring mvc3框架包含jar包,适于学习

    11. **验证**:使用Hibernate Validator或者JSR-303/JSR-349提供的注解对输入数据进行验证。 12. **国际化**:Spring MVC提供了i18n支持,可以轻松实现多语言应用。 13. **RESTful API**:Spring MVC 3引入了更好...

    spring mvc入门示例

    7. **验证**:使用Hibernate Validator或Spring的Validator接口,可以在控制器方法执行前验证模型数据。 8. **异常处理**:通过@ControllerAdvice和@ExceptionHandler注解,可以全局地处理异常,提供统一的错误页面...

    精通Spring MVC4 带书签电子版

    14. **Spring MVC与其他技术集成**:如与Spring Data JPA、MyBatis等持久层框架的整合。 这本书的带书签版本意味着读者可以更方便地定位到感兴趣的内容,快速回顾和查找关键知识点。无论你是初学者还是有经验的...

    spring mvc教程

    Spring MVC 可以与许多其他技术无缝集成,如 MyBatis、Hibernate、JPA 用于持久层,Acegi 或 Spring Security 用于安全,Acegi 或 Spring Batch 用于批处理等。 ### 10. 示例项目 在提供的 "SpringMVC.ppt" 文件中...

    Spring+MVC+开发快速入门

    例如,使用`@Service`和`@Repository`注解创建服务和DAO,配合Spring的数据访问支持(如JDBC、Hibernate、MyBatis等)。 9. **单元测试和集成测试**:Spring MVC提供了测试支持,可以方便地进行单元测试和集成测试...

    spring mvc详解

    Spring MVC 可以轻松集成各种技术,如MyBatis、Hibernate等ORM框架,以及Spring Security、Spring Cache等其他Spring模块。 总结,Spring MVC 是一个强大的Web开发框架,它提供了一套完整的解决方案,帮助开发者...

    SpringMVCDemo

    11. **验证**:SpringMVC 集成了 Hibernate Validator,允许对输入数据进行验证。可以使用 `@Valid` 注解和自定义验证注解来确保数据有效性。 12. **国际化**:SpringMVC 支持多语言,通过 `...

    spring框架

    12. **整合其他框架**:Spring框架本身具备良好的集成性,可以轻松地与Hibernate、MyBatis等持久层框架,以及Acegi(现在的Spring Security)等安全框架结合使用。 总的来说,Spring框架以其强大的功能和高度的灵活...

    ssh框架jar包整合,有最全jar包下载地址

    SSH框架,全称为Struts2、Hibernate和Spring的组合,是...同时,随着技术的发展,SSH框架逐渐被Spring Boot、Spring MVC和MyBatis等更现代的框架所替代,但SSH作为经典的Java Web开发框架,仍然具有重要的学习价值。

    springmvc4教程

    Spring MVC 是一个基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的一部分,主要用来处理 Web 请求。在Spring MVC4版本中,它带来了许多优化和改进,旨在提高开发效率和性能。本教程将深入讲解Spring MVC4的...

    SpingMVC

    Spring MVC 可以轻松与其他 Spring 模块(如 Spring AOP、Spring Security、Spring Data 等)以及第三方库(如 MyBatis、Hibernate、JPA 等)集成,实现更强大的功能。 ### 6. 示例应用 "Spring-MVC-Showcase" ...

    《跟开涛学SpringMVC》.zip

    11. **Spring MVC与其他技术集成**:如与MyBatis或Hibernate的整合,以及Spring Security的集成,实现用户认证和授权。 通过《跟开涛学SpringMVC》这本教程,读者可以系统地学习Spring MVC框架,提升Java Web开发...

    springMvc_SpringMvc入门_

    10. **验证**:使用 `@Valid` 注解配合 Hibernate Validator 或自定义验证器,可以在 Controller 方法执行前对传入的数据进行验证。 11. **异常处理**:全局异常处理器可以通过实现 `HandlerExceptionResolver` ...

    springMVC架构设计

    实践中,你还会了解到如何与数据库集成,使用 Spring Data JPA 或 MyBatis 进行数据访问,以及如何集成验证框架如 Hibernate Validator。 总之,Spring MVC 提供了一个强大且灵活的架构,用于构建高性能的 Web 应用...

    springmvc相关jar包

    Spring MVC 是一个基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的一部分,主要用于构建控制器层,实现 MVC(Model-View-Controller)设计模式。在这个名为 "springmvc相关jar包" 的压缩文件中,包含了一系列...

Global site tag (gtag.js) - Google Analytics