PrepareStatement防止数据库注入



package cn.test.javaee.service;

import org.junit.Test;

import cn.test.entity.User;
import cn.test.javaee.service.impl.UserServiceImpl;

public class IUserServiceTest {

	@Test
	public void testLogin() {
		IUserService userService = new UserServiceImpl();

		User user = new User();

		user.setName("xiaoli");
		// 数据库注入
		user.setName("abc' or '1' = '1");

		user.setPasswd("sergsrg' or '1' = '1");

		User resuser = userService.Login(user);
		System.out.println(resuser.toString());
		if (resuser != null && resuser.getName() != null && !("".equals(resuser.getName()))) {
			System.out.println("Login Success");
			System.out.println(resuser.toString());
		} else {
			System.out.println("Login Failed");
		}
	}

	@Test
	public void testLoginForPrepareStatement() {
		IUserService userService = new UserServiceImpl();

		User user = new User();

		user.setName("xiaoli");
		// 数据库注入
		user.setName("abc' or '1' = '1");

		user.setPasswd("sergsrg' or '1' = '1");

		//user.setName("xiaoli");
		//user.setPasswd("123123");
		
		//使用PrepareStatement防止数据库注入
		User resuser = userService.Login(user);

		if (resuser != null && resuser.getName() != null && !("".equals(resuser.getName()))) {
			System.out.println("Login Success");
			System.out.println(resuser.toString());
		} else {
			System.out.println("Login Failed");
		}
	}

}


package cn.test.javaee.dao.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import jdbc.util.JDBCUtil;
import cn.test.entity.User;
import cn.test.javaee.dao.IUserDao;

public class UserDaoImpl2 implements IUserDao {
	@Override
	public User Login(User user) {
		Connection conn = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;

		try {
			conn = JDBCUtil.getConnection();
			//preparedStatment 他是预编译的sql -- 如果需要对象,使用?进行占位。
			String sql = " select * from employee where name=? and passwd=?";
			System.out.println(sql);
			//用PreparedStatement继续预编译
			stmt = conn.prepareStatement(sql);
			
			//向sql中的占位符进行赋值
			//表示的是向某一个位置进行赋值。
			stmt.setString(1,user.getName());
			stmt.setString(2,user.getPasswd());
			rs = stmt.executeQuery();
			
			User result = new User();
			while(rs.next())
			{
				result.setEmployee_id(rs.getInt(1));
				result.setName(rs.getString("name"));
				result.setSalary(rs.getInt(3));
				result.setAge(rs.getInt(4));
				result.setJob(rs.getString("job"));
				result.setPasswd(rs.getString("passwd"));
				result.setSex(rs.getString("sex"));
			}
			return result;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		finally
		{
			JDBCUtil.release(rs, stmt, conn);
		}
		return null;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值