短信验证:
1.通过第三方平台获取接口,以及鉴权方法
2.设置自己的信息,以及发送的内容
3 核心代码
public class singlesend{
public static String URL="http://api01.monyun.cn:7901/sms/v2/std/single_send";
StringRandom Random=new StringRandom();
public static boolean isMobileNO(String mobile){
Pattern p=null;
Matcher m=null;
boolean b=false;
p=Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0,5-9])|(17[0-9]))\\d{8}$");
m=p.matcher(mobile);
b=m.matches();
return b;
}
@SuppressWarnings("unchecked")
public String Send(String mobile) throws UnsupportedEncodingException {//发送手机号
JSONObject jsobj1 = new JSONObject();
String random=Random.getStringRandom();
jsobj1.put("apikey", "鉴权码");
jsobj1.put("mobile", mobile);
String decode=URLEncoder.encode("XXXXXXXXXXXXXXXX:"+random+"。","GBK");
jsobj1.put("content",decode);
post(jsobj1);
return random;
}
public static String post(JSONObject json) {//post请求
HttpClient client=new DefaultHttpClient();// 实例化短信处理对象
HttpPost post=new HttpPost(URL);
post.setHeader("Content-Type","application/json");//发送post请求的头部参数信息格式
post.addHeader("Authorization","Basic YWRtaW46");//追加头部参数信息即用户身份验证加密
String result="";
try {
StringEntity s=new StringEntity(json.toString(),"utf-8");
s.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,"application/json"));
post.setEntity(s);
HttpResponse httpResponse = client.execute(post);
InputStream inStream = httpResponse.getEntity().getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(inStream, "utf-8"));
StringBuilder strber = new StringBuilder();
String line=null;
while ((line=reader.readLine())!=null)
strber.append(line+"\n");
inStream.close();
result=strber.toString();
if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
System.out.println("发送成功!");
} else {
System.out.println("发送失败!");
}
} catch (Exception e) {
System.out.println("出现异常!");
throw new RuntimeException(e);
}
return result;
}
}
4 (1)问题:用servlet实现中页面不能进行异步提交
解决:用ajax
例<script type="text/javascript">
function fn1(){
var username=$("#username").val();
var password=$("#password").val();
var mobile = $("#mobile").val();
var email = $("#email").val();
$.post("/User/RegistServlet",
{"username":username,"password":password,"mobile":mobile,"email":email},
function(data){
alert(data);
}
);}
function fn2(){
var verificationde = $("#verificationde").val();
$.post("/User/singlesendServlet",
{"verificationde":verificationde},
function(data){
if(data=="ok"){
window.location="/User/login.html";
}else if(data=="no"){
alert("邮箱未激活或邮箱错误!");
}
else{
alert("验证码错误!");
}
} );
}
</script>
(2)用ssh框架实现中页面进行异步提交
绑定onsubmit事件(用jq的话是submit()), 在submit按钮效果触发之前我们就把数据提交了, 然后我们return false(让submit这次的点击触发事件失效, 否则表单又会提交一次, 并且刷新页面)
核心代码:
js
$(document).ready(function() {
$('#err_form').submit(function() {
var username=$("#username").val();
var password=$("#password").val();
var mobile = $("#mobile").val();
var email = $("#email").val();
var params = {
"username":username,
"password":password,
"email":email,
"mobile":mobile
};
$.ajax({
type:"post",
async:true,
url: "zhuce.action",
data: params,
dataType:"text",
success:function(){
alert("发送成功");
}
});
return false; //还是要return false, 跟上面一样的道理
});
});
<form id="err_form">
<tr>
<td colspan="2">
用户名:<input name="username" id="username" maxlength="12" οnfοcus="showTips()" />
<span id="namespan"></span><br/>
</td>
</tr>
<tr>
<td colspan="2">
密码: <input type="password" name="password" id="password" οnfοcus="showTips()" />
<span id="pspan"></span><br/>
</td>
</tr>
<tr>
<td colspan="2">
确认密码: <input type="password" name="repassword" id="repassword" οnfοcus="showTips()" />
<span id="respan" style="text-align: center"></span><br/>
</td>
</tr>
<tr>
<td colspan="2">
Email:<input name="email" id="email" οnfοcus="showTips()" />
<span id="mspan" style="text-align: center"></span><br/>
</td>
</tr>
<tr>
<td colspan="2">
手机号:<input name="mobile" id="mobile" maxlength="11" οnfοcus="showTips()" />
<span id="telespan" style="text-align: center"></span>
<input type="submit" id="sub" value="发送验证码"/>
<br/>
</td>
</tr>
</form>
绑定邮箱
1.设置通过那个邮箱及邮箱号发送邮件,得到鉴权码
核心代码
public class EmailUtils {
private static final String FROM="由哪个邮箱发送";在邮箱里面进行设置
public static void sendAccountActivateEmail(String username,String password,String email,String codeUrl) {
Session session=getSession();
MimeMessage message=new MimeMessage(session);
try {
message.setSubject("XXXXXXXXXXXXXXX!");
message.setSentDate(new Date());
message.setFrom(new InternetAddress(FROM));
message.setRecipient(RecipientType.TO, new InternetAddress(email));
System.out.println(email+username+codeUrl);
message.setContent("<a target='_BLANK' href='http://127.0.0.1:8080/ssh_xuetang/activate.jsp?username="+username+"&codeUrl="+codeUrl+"'target='_blank'>点击激活</a>","text/html;charset=utf-8");
Transport.send(message);
} catch (Exception e) {
e.printStackTrace();
}
}
public static Session getSession() {
Properties props=new Properties();
props.setProperty("mail.transport.protocol","smtp");
props.setProperty("mail.smtp.host","smtp.qq.com");
props.setProperty("mail.smtp.port","25");
props.setProperty("mail.smtp.auth","true");
Session session = Session.getInstance(props, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(FROM, "鉴权码");
}
});
return session;
}
}
2.激活邮箱(Dao层实现代码)
public void updateEmailername(String username) {//激活邮箱0未激活1激活
Session session = getHibernateTemplate().getSessionFactory().openSession();
Transaction trans=session.beginTransaction();
String hql="update User user set user.activated=1 where user.username ='"+username+"'";
Query queryupdate=session.createQuery(hql);
queryupdate.executeUpdate();
trans.commit();
}
}
3通过邮箱找回密码(Dao层实现代码)
public void updatePassW(String email, String password) {//通过邮箱更新密码
Session session = getHibernateTemplate().getSessionFactory().openSession();
Transaction trans=session.beginTransaction();
String hql="update User user set user.password='"+password+"' where user.email ='"+email+"'";
Query queryupdate=session.createQuery(hql);
queryupdate.executeUpdate();
trans.commit();
}