SSH注册通过邮箱激活

SSH注册通过邮箱激活原理就是在数据库中添加一个字段,例如state:激活为1,未激活为0,从而判断是否有登录系统的权限

大概步骤,我们注册成功后,向输入的邮箱发送信息,点击邮箱中的链接(链接可以是自己系统的登录链接),使state字段改为1

1.使用的两个工具类

(1)邮件创建工具类

package com.yinhe.util;

import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
/**
 * 邮件创建工具类
 * @author 
 *
 */
public class MailUtils {

	public static void sendMail(String email, String emailMsg)
			throws AddressException, MessagingException {

		Properties props = new Properties();
		// 发送邮件协议名称  
		props.setProperty("mail.transport.protocol", "SMTP");
		 // 设置邮件服务器主机名  
		props.setProperty("mail.host", "smtp.163.com");
		// 发送服务器需要身份验证  
		props.setProperty("mail.smtp.auth", "true");
//		// 开启debug调试  
//		props.setProperty("mail.debug", "true");
		Authenticator auth = new Authenticator() {
			public PasswordAuthentication getPasswordAuthentication() {
				return new PasswordAuthentication("yinyancheng161@163.com", "yinyancheng161");
			}
		};

		Session session = Session.getInstance(props, auth);
		//2创建邮件对象    
		Message message = new MimeMessage(session);
		//2.1设置发件人
		message.setFrom(new InternetAddress("yinyancheng161@163.com"));
		//2.2设置收件人
		message.setRecipient(RecipientType.TO, new InternetAddress(email)); 
		//2.3设置邮件主题
		message.setSubject("你要马上激活,我们不是病毒");
		//2.4邮件的正文
		message.setContent(emailMsg, "text/html;charset=utf-8");
		//3发送
		Transport.send(message);
	}
}

(2)uuid工具类

package com.yinhe.util;

import java.util.UUID;

public class CommonsUtils {

	//生成uuid
	public static String getUUID(){
		return UUID.randomUUID().toString();
	}
}

2.dao层代码,用来注册用户信息,用链接后跟的code字段来查询表,修改激活的状态

	//注册用户信息
	public void addUser(User user) {
		this.getHibernateTemplate().save(user);
	}
	
	//查询code
	public User findByCode(String code) {
		List<User> users = (List<User>) this.getHibernateTemplate().find("from User where code = ?",code);
		return users.size() == 0 ? null : users.get(0);
	}
	//修改激活状态
	public void updateUser(User user) {
		this.getHibernateTemplate().update(user);
	}

接口类代码 

public interface IUserDao {
	public void addUser(User user);
	public User findByCode(String code);
	public void updateUser(User user);
}

3.Service层代码,用来调用dao层方法

public class UserServiceImpl implements IUserService{

	@Resource
	private IUserDao userDao;
	@Override
	public void addUser(User user) {
		userDao.addUser(user);
	}
	
	@Override
	public void updateUser(User user) {
		userDao.updateUser(user);
	}
	@Override
	public User findByCode(String code) {
		return userDao.findByCode(code);
	}
	
}

service层接口类代码

public interface IUserService {
	public void addUser(User user);
	public User findByCode(String code);
	public void updateUser(User user);
}

4.action层代码,判断用户等录的信息,注册用户信息,其中夹杂着验证码的判断,但是并无影响,注意自己生成get,set方法

public class UserAction extends ActionSupport{
	@Resource
	private IUserService userService;
	private User user;
	private String checkcode;
	private String code;
	public String login() {
		if (user != null) {
			User result_user = userService.findUserByAccount(user);
			if (result_user != null) {
				//判断验证码程序
				//从Session中获得验证码的随机值
				String checkcode1 =(String)ServletActionContext.getRequest().getSession().getAttribute("checkcode");
				if(!checkcode.equalsIgnoreCase(checkcode1)){
					this.addActionError("验证码输入错误!");
					return "checkcodeFail";
				}else if(result_user.getState() == 1){
					ActionContext.getContext().getSession().put("user", result_user);
					return "loginSuccess";
				}else {
					return "loginFail";
				}
			}
		}
		return "loginFail";
	}
	public String saveUser() {
		//判断验证码程序
		//从Session中获得验证码的随机值
		String checkcode1 =(String)ServletActionContext.getRequest().getSession().getAttribute("checkcode");
		if(!checkcode.equalsIgnoreCase(checkcode1)){
			this.addActionError("验证码输入错误!");
			return "checkRegister";
		}else {
			code = CommonsUtils.getUUID();
			System.out.println(code);
			String emailMsg = "恭喜您注册成功,请点击下面的连接进行激活账户" + "<a href='http://localhost:8080/ShopStore-SSH/user_jihuo.action?code="
					+ code + "'>" + "http://localhost:8080/ShopStore-SSH/user_jihuo.action?code=" + code + "</a>";
			user.setCode(code);
			userService.addUser(user);
			try {
				MailUtils.sendMail(user.getEmail(), emailMsg);
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return "saveUser";
	}
	//激活用户登录权限
	public String jihuo() {
		User user = userService.findByCode(code);
		if(user!=null) {
			user.setState(1);
			user.setCode(null);
			userService.updateUser(user);
			return "jihuoSuccess";
		}
		return "jihuoFail";
	}
}

5.struts,书写跳转路径

<package name="user" extends="struts-default" strict-method-invocation="false">
		<action name="user_*" class="userAction" method="{1}">
			<result name="loginSuccess">/index.jsp</result>
			<result name="loginFail">/login.jsp</result>
			<result name="checkcodeFail">/login.jsp</result>
			<result name="saveUser">/registerSuccess.jsp</result>
			<result name="checkRegister">/register.jsp</result>
			<result name="jihuoFail">/jihuoFail.jsp</result>
			<result name="jihuoSuccess">/login.jsp</result>
		</action>
	</package>

6.前台页面,注册成功页面,页面跳转到激活页面,注册页面、注册失败页面以及激活失败页面大同小异,下面就不在书写了,只附上注册成功后中间的跳转页面

<body>
	<h2>恭喜您注册成功,请赶快前往注册邮箱激活您的帐户</h2>
	<div>
		<span><a href="http://mail.163.com/">网易163邮箱</a></span>&nbsp;&nbsp;&nbsp;
		<span><a href="http://mail.126.com/">网易126邮箱</a></span>&nbsp;&nbsp;&nbsp;
		<span><a href="https://mail.qq.com/cgi-bin/loginpage">腾讯QQ邮箱</a></span>&nbsp;&nbsp;&nbsp;
	</div>
</body>

激活成功后,state为1,激活失败,state为0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值