1. 程式人生 > >SpringMVC中模擬郵件驗證實現註冊登入

SpringMVC中模擬郵件驗證實現註冊登入

第一步:安裝郵箱伺服器和客戶端

第二步:專案匯入郵件jar包      (  密碼:mben)

第三步:專案中使用程式碼傳送郵件

我的資料庫user表:

專案中傳送郵件的程式碼體現在service中:

public interface IUserService {
	User queryOne(User user)throws Exception;
	void update(User user)throws Exception;
	void addUser(User user)throws Exception;
}
@Service
public class UserServiceImpl implements IUserService {

	@Autowired
	private UserDaoImpl dao;
	
	@Override
	public User queryOne(User user) throws Exception {
		return dao.queryOne(user);
	}

	@Override
	public void update(User user) throws Exception {
		System.out.println(user.getUuid());
		dao.update(user);
	}

	@Override
	public void addUser(User user) throws Exception {
		user.setUuid(UUID.randomUUID().toString());//生成一個uuid
		dao.addUser(user);
		
		//傳送郵件
		Properties prop = new Properties();
		prop.setProperty("mail.host", "192.168.43.66");//192.168.43.66 --> 本地ip地址
		prop.setProperty("mail.transport.protocol", "smtp");
		prop.setProperty("mail.smtp.auth", "true");
		// 使用JavaMail傳送郵件的5個步驟
		// 1、建立session
		Session session = Session.getInstance(prop);
		// 開啟Session的debug模式,這樣就可以檢視到程式傳送Email的執行狀態
		session.setDebug(true);
		// 2、通過session得到transport物件
		Transport ts = session.getTransport();
		// 3、使用郵箱的使用者名稱和密碼連上郵件伺服器,傳送郵件時,發件人需要提交郵箱的使用者名稱和密碼給smtp伺服器,使用者名稱和密碼都通過驗證之後才能夠正常傳送郵件給收件人。
		ts.connect("192.168.43.66", "a", "a");
		// 4、建立郵件
		Message message = createSimpleMail(session,user.getUuid());
		// 5、傳送郵件
		ts.sendMessage(message, message.getAllRecipients());
		ts.close();
	}
	
	public  MimeMessage createSimpleMail(Session session,String uuid) throws Exception {
		// 建立郵件物件
		MimeMessage message = new MimeMessage(session);
		// 指明郵件的發件人
		message.setFrom(new InternetAddress("
[email protected]
")); // 指明郵件的收件人,現在發件人和收件人是一樣的,那就是自己給自己發 message.setRecipient(Message.RecipientType.TO, new InternetAddress("[email protected]")); // 郵件的標題 message.setSubject("只包含文字的簡單郵件"); // 郵件的文字內容 message.setContent("你好:<a href='http://localhost:8080/zq/update.do?uuid="+uuid+"'>驗證使用者註冊</a>", "text/html;charset=UTF-8"); // 返回建立好的郵件物件 return message; } }

dao層實現資料的增刪改查:

public interface IUserDao {
	User queryOne(User user)throws Exception;
	void update(User user)throws Exception;
	void addUser(User user)throws Exception;
}
@Repository
public class UserDaoImpl implements IUserDao {

	@Autowired
	private JdbcTemplate jt;

	@Override
	public User queryOne(User user) {
		User u = null;
		try {
			String sql = "select * from user where isenabled=true and username=?";
			//如果不捕獲異常 --> ResultSet is empty
			u = (User) jt.queryForObject(sql, new BeanPropertyRowMapper(User.class), user.getUsername());
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
		return u;
	}

	@Override
	public void update(User user) throws Exception {
		System.out.println("updateUser======");
		String sql="update user set isenabled=true,uuid=null where uuid=?";
		jt.update(sql,user.getUuid());
		System.out.println("updateUser==後======");
	}

	@Override
	public void addUser(User user) throws Exception {
		System.out.println("addUser======");
		String sql="insert into user(username,password,uuid) values(?,?,?)";
		jt.update(sql,user.getUsername(),user.getPassword(),user.getUuid());
		System.out.println(sql+"-======-");
	}

}

controller控制層做頁面跳轉邏輯處理:

@Controller
public class LoginController {

	@Autowired
	private UserServiceImpl service;

	@RequestMapping("/login.do")
	public String login(User user,HttpSession session) throws Exception {
		User u = service.queryOne(user);
		if (u == null) {
			return "redirect:/login.html";
		} else {
			if (user==null || !user.getPassword().equals(u.getPassword())) {
				return "redirect:/login.html";
			}
		}
		session.setAttribute("user", u);
		return "/index.html";
	}
	
	@RequestMapping("/signup.do")
	public String signup(User user) throws Exception{
		/**
		 * 註冊使用者
		 * 1.儲存資料
		 * 2.傳送郵件
		 */
		System.out.println("signup.do前====");
		service.addUser(user);
		System.out.println("signup.do新增後====");
		return "redirect:/login.html";
	}
	
	//驗證方法  127.0.0.1/zq/update?uuid=值
	@RequestMapping("/update.do")
	public String update(User user) throws Exception{
		/**
		 * 註冊使用者
		 * 1.儲存資料
		 * 2.傳送郵件
		 */
		service.update(user);
		return "redirect:/login.html";
	}
	
}

登入註冊頁面-->寫的很簡單,主要看郵件驗證的功能實現

login.html:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登入頁面</title>
</head>
<body align="center">
	<h1>登入頁面</h1>
	<form action="/zq/login.do" method="post">
		使用者名稱:<input type="text" name="username" placeholder="賬號/手機號/郵箱"><br /> 
		密碼:<input	type="text" name="password" placeholder="密碼"><br /> 
		<button type="submit">登&nbsp;&nbsp;錄</button>
	</form>
</body>
</html>

register.html:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body align="center">
	<h1>註冊頁面</h1>
	<form action="/zq/signup.do" method="post">
		使用者名稱:<input type="text" name="username" placeholder="使用者名稱"><br /> 
		密碼:<input	type="text" name="password" placeholder="密碼"><br /> 
		<input type="submit"><br />
	</form>
</body>
</html>

具體程式碼看分享的專案資源吧~           密碼: v5yw

這裡簡單說下我的郵箱設定之類的吧  

郵箱服務端:   -->我新建的是a和b兩個賬號

郵箱客服端:

傳送郵件