package?com.imooc.servlet;
import?java.io.IOException;
import?java.io.PrintWriter;
import?javax.servlet.ServletException;
import?javax.servlet.http.HttpServlet;
import?javax.servlet.http.HttpServletRequest;
import?javax.servlet.http.HttpServletResponse;
import?com.imooc.util.CheckUtil;
public?class?WeixinServlet?extends?HttpServlet?{
????@Override
????protected?void?doGet(HttpServletRequest?req,?HttpServletResponse?resp)
????????????throws?ServletException,?IOException?{
????????String?signature=req.getParameter("signature");
????????String?timestamp=req.getParameter("timestamp");
????????String?nonce=req.getParameter("nonce");
????????String?echostr=req.getParameter("echostr");
????????
????????PrintWriter?out=?resp.getWriter();
????????System.out.println(CheckUtil.checkSignature(signature,?timestamp,?nonce));
????????if(CheckUtil.checkSignature(signature,?timestamp,?nonce)){
????????????out.print(echostr);
????????}
????}
}
---------------------------------------------------------------
package?com.imooc.util;
import?java.security.MessageDigest;
import?java.util.Arrays;
public?class?CheckUtil?{
????public?static?final?String?token="hrkj";
????public?static?boolean?checkSignature(String?signature,?String?timestamp,
????????????String?nonce)?{
????????String[]?arr?=?new?String[]?{?signature,?timestamp,?nonce?};
????????//?排序
????????Arrays.sort(arr);
????????//?生成字符串
????????StringBuffer?content?=?new?StringBuffer();
????????for?(int?i?=?0;?i?<?arr.length;?i++)?{
????????????content.append(arr[i]);
????????}
????????String?temp?=?getSha1(content.toString());
????????System.out.println("temp="+temp);
????????System.out.println("signature="+signature);
????????return?temp.equals(signature);
????}
????//?SHA1加密
????public?static?String?getSha1(String?str)?{
????????if?(null?==?str?||?0?==?str.length())?{
????????????return?null;
????????}
????????char[]?hexDigits?=?{?'0',?'1',?'2',?'3',?'4',?'5',?'6',?'7',?'8',?'9',
????????'a',?'b',?'c',?'d',?'e',?'f'?};
????????try?{
????????????MessageDigest?mdTemp?=?MessageDigest.getInstance("SHA1");
????????????mdTemp.update(str.getBytes("UTF-8"));
????????????byte[]?md?=?mdTemp.digest();
????????????int?j?=?md.length;
????????????char[]?buf?=?new?char[j?*?2];
????????????int?k?=?0;
????????????for?(int?i?=?0;?i?<?j;?i++)?{
????????????????byte?byte0?=?md[i];
????????????????buf[k++]?=?hexDigits[byte0?>>>?4?&?0xf];
????????????????buf[k++]?=?hexDigits[byte0?&?0xf];
????????????}
????????????return?new?String(buf);
????????}?catch?(Exception?e)?{
????????????return?null;
????????}
????}
}
2015-12-23
在checkUtil中的arr字符串數(shù)組里,用你的token把signature替換掉。