Struts中客户端验证跟服务器端验证有何区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Struts中客户端验证跟服务器端验证有何区别相关的知识,希望对你有一定的参考价值。

Struts中客户端验证跟服务器端验证有何区别

本质区别:
就是客户端数据校验是在客户端上进行的,而服务器端校验是在服务器上进行的,在速度上客户端要快很多,但也有缺陷,就是当有黑客攻击的时候,他完全可以绕过客户端直接和服务器交互。我看到过有人介绍这方面的知识时说,一个有经验的黑客至少能有100种以上的方法绕过客户端之间访问服务器,而且服务器如果是用JDBC写的话,还要方式sql的注入。不然很容易让黑客攻击。
参考技术A Struts中客户端验证跟服务器端验证有区别.客户端验证直接写一个action文件便可实现,而服务器端验证必须通过客户端程序去调用服务器端相应的WebServices,实现业务逻辑.

服务器端验证

1.导入JSR303验证类库Jar包
2.在MVC的配置文件中添加<mvc:annotation-driven/>的配置
3.在MVC的配置文件中添加验证器的配置
4.在接收表单数据的类中添加验证规则注解
5.在控制器方法的表单对象参数上添加@valid注解
6.在控制器方法中对BindResult对象进行判断

 

 

struts2:validation.xml

struts2                            SpringMVC

实体类                              LoginForm类

action                              Controller

struts.xml                        MVC-servlet.xml

先导入支持服务器端验证的组件    JSR-303验证类库  里边有四个类库

在LoginForm类中配置:

package cn.bdqn.mvc.form;

import org.hibernate.validator.constraints.NotEmpty;

public class LoginForm {
	private String loginName;
	private String password;
	
	@NotEmpty(message="请输入登录名")
	public String getLoginName() {
		return loginName;
	}
	public void setLoginName(String loginName) {
		this.loginName = loginName;
	}
	@NotEmpty(message="请输入密码")
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
}

 在MVC-servlet.xml中配置

<!-- 基于注解的MVC配置 -->
<mvc:annotation-driven/>
<!-- 验证器 -->	 
	<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
		<!-- 使用Hibernate验证框架进行验证 -->
        <property name="providerClass"  value="org.hibernate.validator.HibernateValidator"/>        
    </bean>

 在LoginController类中配置:

//建议不用实体类接受请求,建议单独定义一个表单类
	@RequestMapping(value="login",method=RequestMethod.POST)
	public String doLogin2(
			@Valid@ModelAttribute("form")LoginForm loginForm,//这样转发回表单页面的时候会自动回填数据
			BindingResult result
			){
		//是否发生服务器端验证错误,hasErrors()是管所有的错误
		if(result.hasErrors()){
			return "login";
		}
		
		if(!loginForm.getLoginName().equals("admin")){
			result.rejectValue("loginName","form", "用户名输入错误");  //reject是驳回的意思
		}else if (!loginForm.getPassword().equals("123456")) {
			result.rejectValue("password","form", "密码输入错误");
		}
		//如果添加了错误信息,则转发回登陆表单页面
		if(result.hasErrors()){
			return "login";
		}
		
		
		System.out.println("登录名:"+loginForm.getLoginName());
		System.out.println("密码:"+loginForm.getPassword());
		return "hello";
	}

 

以上是关于Struts中客户端验证跟服务器端验证有何区别的主要内容,如果未能解决你的问题,请参考以下文章

(十六)客户端验证与struts2中的服务器端验证

struts2中服务器端数据校验

Struts2-拦截器

基于 Token 的身份验证方法

基于 Token 的身份验证方法

基于 Token 的身份验证方法