servletでソフトウェアサービス側APIを書く
最近、会社のソフトウェアを手伝ってサービス端のAPIを書いています.以前はphpでしたが、今はjavaで完成しています.まず私が菜鳥なので、この任務を受け取ったとき、私は少し雲の中で霧の中で、よく分かりませんでした.アクセスが必要なアドレスは数少ないので、ログイン、登録、メニューの取得、製品リストの取得......
ボスがくれた任務は一週間で終わりました(結局私は菜鳥ですか):D、最初の三日間は何の見当もつかなかったが、私はずっと私が完成できると信じていた.データの受信と送信にほかならないからです.しかし、水曜日になって、時間が多くなくて、納品しなければならないので、東西に耻ずかしいことはありません.よし、くだらないことは言わないで、私のやり方を貼ってください.ヒヒ.
ロゴを貼り付けましょう
アクセスアドレスはhttp://xxx.xxx.xxx/login http/1.1
コードは少し乱れているようですが、このようにしましょう.この中にはデータを受け入れる方法が書かれていません.ほほほ.
ボスがくれた任務は一週間で終わりました(結局私は菜鳥ですか):D、最初の三日間は何の見当もつかなかったが、私はずっと私が完成できると信じていた.データの受信と送信にほかならないからです.しかし、水曜日になって、時間が多くなくて、納品しなければならないので、東西に耻ずかしいことはありません.よし、くだらないことは言わないで、私のやり方を貼ってください.ヒヒ.
ロゴを貼り付けましょう
アクセスアドレスはhttp://xxx.xxx.xxx/login http/1.1
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
Crypter crypter = new Crypter();
if (request.getHeader("Authorization") == null) {
response.setStatus(401);
response.setHeader("Cache-Control", "no-store");
response.setDateHeader("Expires", 0);
Date date = new Date();
String noncecode = new MD5Code().getMD5ofStr(String.valueOf(date.getTime())).toLowerCase();
response.setHeader("WWW-authenticate","Digest qop=\"auth\",realm=\"localhost\",nonce=\"" + noncecode + "\",algorithm=\"MD5\",uri=\"api/login\"");
} else {
String encoded = (request.getHeader("Authorization"));
Map<String, String> map = new HashMap<String, String>();
map = new CodeParse().parseDigest(encoded);
String password = "";
try {
password = DAOFactory.getUserDAOInstance() .queryPasswordByUsername(map.get("username"));
} catch (Exception e1) {
e1.printStackTrace();
}
String a1 = map.get("username")+":"+map.get("realm").toLowerCase()+":"+password;
String A1 = new MD5Code().getMD5ofStr(a1).toLowerCase();
String a2 = request.getMethod()+":"+map.get("uri").toLowerCase();
String A2 = new MD5Code().getMD5ofStr(a2).toLowerCase();
String a3 = A1.toLowerCase()+":"+map.get("nonce").toLowerCase()+":"+map.get("nc").toLowerCase()+":"+map.get("cnonce").toLowerCase()+":"+map.get("qop").toLowerCase()+":"+A2.toLowerCase();
String responseStr = new MD5Code().getMD5ofStr(a3).toLowerCase();
if(map.get("response").equals(responseStr)) {
String keyc =(String)request.getSession().getAttribute("keycrypt");
if("".equals(keyc) || keyc==null) {
response.setStatus(200);
....// X-SessionKey, keycrypt
response.setHeader("X-SessionId", request.getSession().getId());
response.setHeader("X-SessionKey", (String)request.getSession().getAttribute("keycrypt"));
}
}
}
}
}
コードは少し乱れているようですが、このようにしましょう.この中にはデータを受け入れる方法が書かれていません.ほほほ.