メール認証コードの取得

12704 ワード

一般的にユーザーがログインする時、携帯電話番号を選んでログインするので、携帯電話の認証コードを取得するのは避けられない.フロントエンドページに認証コードbuttonを設定してクリックすると、カウントダウン60 sを実現し、認証コードを送信する.
設計構造:バックグラウンドランダム6ビット検証コードは検証コードをsessionに格納し、サードパーティインタフェースを呼び出して送信検証コードをバックグラウンドでsessionを取り出し、入力した検証コードと一致させる.
必要なjarパッケージはcommons-codec-1.4です.jar commons-httpclient–3.1.jar commons-loging-1.1.jar
index.jsp
"java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
"com.yzm.SMSUtil" %>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title heretitle>
<style type="text/css">
button {
    background: #F0F0F0 repeat-x;
    padding-top: 3px; 
    border-top : 1px solid #708090;
    border-right: 1px solid #708090;
    border-bottom: 1px solid #708090;
    border-left: 1px solid #708090;
    width: auto;
    line-height: 12pt; 
    font-size : 10pt;
    cursor: hand;
    font-size: 10pt;
    border-top: 1px solid #708090;
}
style>

<script type="text/javascript">
    var countdown=60;
    var userphone=document.getElementById("userphone");
    function settime(obj) {
        if (countdown == 0) {
            obj.removeAttribute("disabled");    
            obj.value=" ";
            countdown = 60;
            return;
        } else {
            obj.setAttribute("disabled", true);
            obj.value=" (" + countdown + ")";
            countdown--;
            setTimeout(function() {
                settime(obj) }
                ,1000)
        }
}
script>

head>
<body>
    <form action="yzmServlet" method="post"><input type="text" name="userphone" id="userphone"><br>
    <input type="button" name="btnSendCode" id="btnSendCode" value=" " onclick="settime(this)"><br>
    String vcode="";
        for(int i=0;i<6;i++){
            vcode=vcode+(int)(Math.random()*9);
        }
        SMSUtil sms=new SMSUtil();
        sms.sendSMS(vcode);
        session.setAttribute("vcode", vcode);
        System.out.println(vcode);

    %><input type="password" name="password" id="password"><br>
     <input type="text" name="yzm" id="yzm">

    <input type="submit" value=" ">
    form>

body>
html>

サードパーティインタフェースを呼び出して情報を送信
package com.yzm;

import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;

public class SMSUtil {

    public void sendSMS(String vcode) {

        try {
            HttpClient client = new HttpClient();
            PostMethod post = new PostMethod("http://gbk.sms.webchinese.cn");
            post.addRequestHeader("Content-Type",
                    "application/x-www-form-urlencoded;charset=gbk");
            // uid: id
            // key: 
            // smsMob: 
            // smsText: 
            NameValuePair[] data = { new NameValuePair("Uid", " "),
                    new NameValuePair("Key", " "),
                    new NameValuePair("smsMob", "1882959****"),
                    new NameValuePair("smsText", " "+vcode) };
            post.setRequestBody(data);
            client.executeMethod(post);
            Header[] headers = post.getResponseHeaders();
            int statusCode = post.getStatusCode();
            System.out.println("statusCode:" + statusCode);
            for (Header h : headers) {
                System.out.println(h.toString());
            }
            String result = new String(post.getResponseBodyAsString().getBytes(
                    "gbk"));
            System.out.println(result);
            post.releaseConnection();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

}