S2SH邮件注册激活后注册成功
首先我的思路是这样的:①接收从客户端接收过来的数据(密码,用户名,邮箱)
②将密码进行MD5加密,然后将信息用"_"连接起来(用于后面分解)
③将信息交个一个工具类中实现生成邮件信息和发送邮件(Action类提供的信息是加密后的密码和用户名和邮箱组成的一个长字符串)
④在之前说过的那个实现生成邮件信息和发送邮件的工具类用到了另外一个工具类(这里说明一下我们的激活连接是由"http://"+"ip地址"+":/端 口"+"/Action"+"后面的信息"组成的),所以我们这里还缺一个获取真实的IP地址,后面有帖代码
⑤点击在Action类里面经过一些验证就成功注册写入数据库(里面的一些细节就不用说的)
先上代码,这是我的一个测试类Action,.......好吧这不重要,
package com.MailActive;
import com.CommonUtils.CommomUtils;
import com.InterceptorPrivilege.Employee;
import com.InterceptorPrivilege.EmployeeService;
import com.Utils.commonUtils.Base64DE;
import com.Utils.commonUtils.JavaMailActive;
import com.opensymphony.xwork2.ModelDriven;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.struts2.ServletActionContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.stereotype.Controller;
import sun.misc.BASE64Decoder;
import javax.servlet.http.HttpServletRequest;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.util.Enumeration;
/**
* Created by etund on 2014/10/29.
*/
@Controller
@Scope("prototype")
public class RegisterAction implements ModelDriven<Employee>{
@Autowired
private EmployeeService employeeService;
private Employee model;
private String register;
public String getRegister() {
return register;
}
public void setRegister(String register) {
this.register = register;
}
@Autowired
private JavaMailActive javaMailActive;
public String createMail() throws Exception{
// 接收并封装数据
// String user49f290d6e8459c53f31f97de37921086 = model.getPassword()+"_"+model.getUsername();
String password = model.getPassword();
String username = model.getUsername();
String email = model.getEmail();
// BASE64加密
password = DigestUtils.md5Hex(password);
register = password+"_"+username+"_"+email;
System.out.println(register+"===========register=============");
// 最后用一个字符串验证是否是当初注册的那个用户
// 把加密后的信息加入邮件
javaMailActive.MailActive(register, email);
// 发送邮件
return "createMail";
}
public String confirmMail(){
String[] info = new String[3];
info = register.split("_");
model.setPassword(info[0]);
model.setUsername(info[1]);
model.setEmail(info[2]);
employeeService.save(model);
System.out.println(model.toString());
return "confirmMail";
}
@Override
public Employee getModel() {
if(model==null){
model = new Employee();
}
return model;
}
}
//接下来的介绍两个工具类
//这是实现封装邮件信息和创建邮件的类
package com.Utils.commonUtils;
import com.CommonUtils.CommomUtils;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.MailMessage;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import javax.annotation.Resource;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
/**
* Created by etund on 2014/10/29.
*/
@Component
public class JavaMailActive {
@Autowired
private JavaMailSenderImpl mailSender;
public void MailActive(String register, String email) {
try {
System.out.println(mailSender);
System.out.println(mailSender.getUsername());
// href 有IP地址+:8887+动作
String ip = CommomUtils.getRealIp();
//建立邮件消息,发送简单邮件和html邮件的区别
MimeMessage mailMessage = mailSender.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage);
messageHelper.setFrom(mailSender.getUsername());
messageHelper.setTo(email);
messageHelper.setSubject("点击下面信息激活你的账号");
// ?register="+register
String href = "http://"+ip+":8887"+"/mailActive_confirmMail.do?register="+register;
System.out.println(href + "---------");
messageHelper.setText("<html><body><a href = " + href + ">点击下面链接激活" + href + "</a></body></html>", true);
Properties properties = new Properties();
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.timeout", "25000");
mailSender.send(mailMessage);
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
//这是得到IP地址的类
public static String getRealIp() {
try {
String localip = null;// 本地IP,如果没有配置外网IP则返回它
String netip = null;// 外网IP
Enumeration<NetworkInterface> netInterfaces =
NetworkInterface.getNetworkInterfaces();
InetAddress ip = null;
boolean finded = false;// 是否找到外网IP
while (netInterfaces.hasMoreElements() && !finded) {
NetworkInterface ni = netInterfaces.nextElement();
Enumeration<InetAddress> address = ni.getInetAddresses();
while (address.hasMoreElements()) {
ip = address.nextElement();
if (!ip.isSiteLocalAddress()
&& !ip.isLoopbackAddress()
&& ip.getHostAddress().indexOf(":") == -1) {// 外网IP
netip = ip.getHostAddress();
finded = true;
break;
} else if (ip.isSiteLocalAddress()
&& !ip.isLoopbackAddress()
&& ip.getHostAddress().indexOf(":") == -1) {// 内网IP
localip = ip.getHostAddress();
}
}
}
if (netip != null && !"".equals(netip)) {
return netip;
} else {
return localip;
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
明天继续更新,今天还有事做
S2SH邮件注册激活后注册成功的更多相关文章
- OpenCores注册步骤和成功提交
一 OpenCores 网站简介,这个是全世界最大的FPGA开源IP核网站.由于最近在学习USB2.0host control IP,所以想去网上下载相关的IP例程学习.通过搜索发现,有两个网站十分 ...
- springboot 注册服务注册中心(zk)的两种方式
在使用springboot进行开发的过程中,我们经常需要处理这样的场景:在服务启动的时候,需要向服务注册中心(例如zk)注册服务状态,以便当服务状态改变的时候,可以故障摘除和负载均衡. 我遇到过两种注 ...
- spring cloud eureka注册原理-注册失败填坑
写在前面 我们知道Eureka分为两部分,Eureka Server和Eureka Client.Eureka Server充当注册中心的角色,Eureka Client相对于Eureka Serve ...
- spring cloud系列教程第八篇-修改服务名称及获取注册中心注册者的信息
spring cloud系列教程第八篇-修改服务名称及获取注册中心注册者的信息 本文主要内容: 1:管理页面主机名及访问ip信息提示修改 2:获取当前注册中心的服务列表及每个服务对于的服务提供者列表 ...
- [C#反编译教程]001.Reflector.NET反编译工具 v8.5绿色版+注册机+注册教程
截图 下载地址 Reflector.NET反编译工具 v8.5绿色版+注册机 下载地址:http://pan.baidu.com/s/1mgN1Cpi 密码:mx19 简介 .NET Reflecto ...
- Dubbo系列之 (二)Registry注册中心-注册(1)
引导 dubbo的服务的注册与发现,需要通过第三方注册中心来协助完成,目前dubbo支持的注册中心包括 zookeeper,consul,etcd3,eureka,nacas,redis,sofa.这 ...
- Dubbo系列之 (二)Registry注册中心-注册(2)
引导 本章主要介绍下AbstractRegistry.FailbackRegistry的作用和源码. AbstractRegistry 首先,直接引出这个类的作用,该类主要把服务提供者信息缓存本地文件 ...
- 注册Goole 账户 成功注册
注册谷歌邮箱等Google帐号时提示:此电话号码无法用于进行验证怎么办? 相信很多网友在注册Google帐号的时候需要手机号码验证,比如在遇到过注册Google Gmail到最后一步“验证您的帐号” ...
- 这两天老是有兄弟问到Vue的登陆和注册,登陆成功留在首页,没有登录回到登录页面,现在我用最简单实用的方法实现(两分钟技就看懂)
其实登录注册,并且登录一次保持登录的状态,是每个项目都需要实现的功能. 网上也有很多的方法,不过,不是通俗易懂,在这里说一下我自己的方法,非常简单实用核心就是用localStorage存.取数据,这样 ...
随机推荐
- 欢迎使用skymvc框架,简单易用的php框架
skymvc是一款轻量.简单易用的php mvc框架,经过多个项目实践改良. 特点: 1.mvc架构 2.m.v.c之间可以互相调用 3.简单的路由控制 R("/index.php" ...
- 服务器端启动soket多线程
方法一: Socket socket=null try{ ServerSocket serversocket=nwe ServerSocket(8080) while(true){ socket=se ...
- lnmp安装--php与nginx结合
软件环境: linux:centos5. nginx:.tar.gz php:.tar.gz lnmp与lamp的区别? lnmp(linux+nginx+mysql+php)的提法相对于lamp(l ...
- C语言-06复杂数据类型-01数组
01-数组 #include <stdio.h> int main() { // 使用注意 // 都是正确写法 //int ages[5] = {10 , 11, 12, 67, 56}; ...
- Quartz2D 备忘 + 学习
Quartz2D Quartz2D是支持iOS和Mac系统的二维绘制引擎,它可以绘制: 绘制图形(图形,线条,圆等) 绘制文字 绘制/生成图片 读取/生成PDF 截图 Quartz2D主要功能就是以画 ...
- Java基础类型自动装箱(autoboxing)
Java SE 1.5 版本及之后,开始提供自动装箱功能. 自动装箱,将基础类型“包装”成一种类型: 基本类型 --> 包装器类 如下过程可触发自动装箱过程: Integer count = ...
- [原博客] POJ 2425 A Chess Game
题目链接题意:给定一个有向无环图(DAG),上面放有一些旗子,旗子可以重合,两个人轮流操作,每次可以把一个旗子从一个位置移动到相邻的位置,无法移动时输,询问先手是否必胜. 这道题可以把每个旗子看作单独 ...
- 关于 OneAPM Cloud Test DNS 监控的几个重要问题
你注意到了吗?OneAPM Cloud Test 已经全面开启支持 DNS 监控了! CT 产品自上线以来一直致力于产品完善,希望能够尽可能全面地满足用户需求,为您提供完美的用户体验.目前 Cloud ...
- USB 2.0 A型、B型、Mini和Micro接口定义及封装
USB全称Universal Serial Bus(通用串行总线),目前USB 2.0接口分为四种类型A型.B型.Mini型还有后来补充的Micro型接口,每种接口都分插头和插座两个部分,Micro还 ...
- 循环冗余校验(CRC)算法入门引导
目录 写给嵌入式程序员的循环冗余校验CRC算法入门引导 前言 从奇偶校验说起 累加和校验 初识 CRC 算法 CRC算法的编程实现 前言 CRC校验(循环冗余校验)是数据通讯中最常采用的校验方式.在嵌 ...