Skip to content

Commit 460d546

Browse files
committed
Server:优化登录注册和验证码;新增返回TimeoutException;JSONObject,JSONRequest和客户端同步;Client:优化登录注册,新增验证码过期提示
1 parent d6a7345 commit 460d546

7 files changed

Lines changed: 110 additions & 88 deletions

File tree

APIJSON(Android)/APIJSON(ADT)/APIJSONApp/APIJSONApp/src/apijson/demo/client/activity_fragment/LoginActivity.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ private void login(int type) {
148148
password = StringUtil.getString(etLoginPassword);
149149

150150
//登录请求
151-
HttpRequest.login(phone, password, type, 0, new OnHttpResponseListener() {
151+
HttpRequest.login(phone, password, type, type, new OnHttpResponseListener() {
152152
@Override
153153
public void onHttpResponse(int requestCode, String resultJson, Exception e) {
154154
dismissProgress();
@@ -174,7 +174,7 @@ public void onHttpResponse(int requestCode, String resultJson, Exception e) {
174174
} else {
175175
APIJSONApplication.getInstance().saveCurrentUser(user);
176176
if (APIJSONApplication.getInstance().isLoggedIn() == false) {
177-
showShortToast("账号或密码错误");
177+
showShortToast((requestCode == Login.TYPE_PASSWORD ? "密码" : "验证码") + "错误");
178178
return;
179179
}
180180

APIJSON(Android)/APIJSON(ADT)/APIJSONApp/APIJSONApp/src/apijson/demo/client/activity_fragment/PasswordActivity.java

Lines changed: 62 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,13 @@ public void initView() {//必须调用
112112
}
113113

114114

115+
/**
116+
* @param isGetting
117+
*/
118+
private void showVerifyGet(final boolean isGetting) {
119+
pbPasswordGettingVerify.setVisibility(isGetting ? View.VISIBLE : View.GONE);
120+
btnPasswordGetVerify.setText(isGetting ? "获取中..." : "重新获取");
121+
}
115122

116123
//UI显示区(操作UI,但不存在数据获取或处理代码,也不存在事件监听代码)>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
117124

@@ -163,49 +170,67 @@ private void getVerify() {
163170
return;
164171
}
165172

166-
if (StringUtil.isNotEmpty(etPasswordPassword0, true)) {
167-
etPasswordPassword1.requestFocus();
173+
if (type == TYPE_VERIFY) {
174+
etPasswordVerify.requestFocus();
168175
} else {
169-
etPasswordPassword0.requestFocus();
176+
if (StringUtil.isNotEmpty(etPasswordPassword0, true)) {
177+
etPasswordPassword1.requestFocus();
178+
} else {
179+
etPasswordPassword0.requestFocus();
180+
}
170181
}
171182

172-
pbPasswordGettingVerify.setVisibility(View.VISIBLE);
173-
btnPasswordGetVerify.setText("获取中...");
183+
showVerifyGet(true);
174184
time = new TimeCount(60000, 1000);
175185

176186
//判断手机号是否已经注册
177187
HttpRequest.checkRegister(StringUtil.getTrimedString(etPasswordPhone), HTTP_CHECK_REGISTER, this);
178188
}
179189

190+
/**从服务器获取验证码
191+
*/
180192
private void getVerifyFromServer() {
181-
showProgress();
193+
runUiThread(new Runnable() {
194+
195+
@Override
196+
public void run() {
197+
showVerifyGet(true);
198+
}
199+
});
200+
182201
HttpRequest.getAuthCode(StringUtil.getTrimedString(etPasswordPhone), HTTP_GET_VERIFY, this);
183202
}
184203

204+
/**下一步
205+
*/
185206
private void toNextStep() {
186-
if (EditTextManager.isInputedCorrect(context, etPasswordPhone, EditTextManager.TYPE_PHONE) == false
187-
|| EditTextManager.isInputedCorrect(context, etPasswordVerify, EditTextManager.TYPE_VERIFY) == false) {
188-
return;
189-
}
190207
if (type != TYPE_VERIFY) {
191208
if (EditTextManager.isInputedCorrect(context, etPasswordPassword0, EditTextManager.TYPE_PASSWORD) == false
192209
|| EditTextManager.isInputedCorrect(context, etPasswordPassword1, EditTextManager.TYPE_PASSWORD) == false) {
193210
return;
194211
}
195-
212+
196213
final String password0 = StringUtil.getTrimedString(etPasswordPassword0);
197214
String password1 = StringUtil.getTrimedString(etPasswordPassword1);
198215
if (! password0.equals(password1)) {
199216
showShortToast("密码输入不一致,请重新输入");
200217
return;
201218
}
202219
}
203-
204-
verify();
220+
221+
switch (type) {
222+
case TYPE_REGISTER:
223+
register();
224+
break;
225+
default:
226+
checkVerify();
227+
break;
228+
}
205229
}
206230

207-
//验证验证码
208-
private void verify() {
231+
/**验证验证码
232+
*/
233+
private void checkVerify() {
209234
if (EditTextManager.isInputedCorrect(context, etPasswordPhone, EditTextManager.TYPE_PHONE) == false
210235
|| EditTextManager.isInputedCorrect(context, etPasswordVerify, EditTextManager.TYPE_VERIFY) == false) {
211236
return;
@@ -234,27 +259,6 @@ private void setPassword() {
234259
}
235260

236261

237-
/**
238-
* @param response
239-
* @param user
240-
*/
241-
private void onPasswordResponse(JSONResponse response, User user) {
242-
dismissProgress();
243-
244-
if (user == null || user.getId() <= 0 || JSONResponse.isSucceed(response) == false) {
245-
showShortToast("注册失败,请检查网络后重试");
246-
return;
247-
// } else if (result.getResultCode() == States.REGISTER_ACCOUNT_EXISTS) {
248-
// showShortToast("该账号已经注册过");
249-
// return;
250-
} else {
251-
showShortToast("注册成功");
252-
APIJSONApplication.getInstance().saveCurrentUser(user);
253-
254-
saveAndExit(newResult().putExtra(INTENT_ID, user.getId()));
255-
}
256-
}
257-
258262
private Intent newResult() {
259263
return new Intent()
260264
.putExtra(INTENT_PHONE, StringUtil.getTrimedString(etPasswordPhone))
@@ -305,22 +309,21 @@ public void initEvent() {//必须调用
305309
@Override
306310
public void onHttpResponse(int requestCode, String resultJson, Exception e) {
307311
final JSONResponse response = new JSONResponse(resultJson);
312+
final JSONResponse response2;
313+
308314
dismissProgress();
309315
switch (requestCode) {
310316
case HTTP_CHECK_REGISTER:
311-
final JSONResponse response2 = response.getJSONResponse(User.class.getSimpleName());
317+
response2 = response.getJSONResponse(User.class.getSimpleName());
312318
Log.i(TAG, "checkPassword result = " + resultJson);
313319
runUiThread(new Runnable() {
314320
@Override
315321
public void run() {
322+
showVerifyGet(false);
316323
if (JSONResponse.isSucceed(response2) == false) {
317324
showShortToast(R.string.get_failed);
318-
pbPasswordGettingVerify.setVisibility(View.GONE);
319-
btnPasswordGetVerify.setText("重新获取");
320325
} else if (JSONResponse.isExist(response2)) {
321326
if (type == TYPE_REGISTER) {
322-
pbPasswordGettingVerify.setVisibility(View.GONE);
323-
btnPasswordGetVerify.setText("获取验证码");
324327
showShortToast("手机号已经注册");
325328
} else {
326329
getVerifyFromServer();
@@ -336,10 +339,11 @@ public void run() {
336339
});
337340
break;
338341
case HTTP_CHECK_VERIFY:
342+
response2 = response.getJSONResponse(Verify.class.getSimpleName());
339343
runUiThread(new Runnable() {
340344
@Override
341345
public void run() {
342-
if (JSONResponse.isExist(response.getJSONResponse(Verify.class.getSimpleName()))) { //验证验证码成功
346+
if (JSONResponse.isExist(response2)) { //验证验证码成功
343347
switch (type) {
344348
case TYPE_REGISTER:
345349
register();
@@ -351,12 +355,9 @@ public void run() {
351355
saveAndExit(newResult());
352356
break;
353357
}
354-
355-
// etPasswordPhone.setEnabled(false);
356-
// } else if(result.getResultCode()==States.AUTHCODE_CHECK_EXPIRED) { //主线程提示验证码过期
357-
// EditTextManager.showInputedError(context, etPasswordVerify, "验证码已过期");
358-
} else {//输入验证码错误提醒
359-
EditTextManager.showInputedError(context, etPasswordVerify, "验证码错误");
358+
} else {//验证码错误
359+
EditTextManager.showInputedError(context, etPasswordVerify
360+
, response.getStatus() == 408 ? "验证码已过期" : "验证码错误");
360361
}
361362
}
362363
});
@@ -366,10 +367,9 @@ public void run() {
366367
runUiThread(new Runnable() {
367368
@Override
368369
public void run() {
369-
pbPasswordGettingVerify.setVisibility(View.GONE);
370+
showVerifyGet(false);
370371
if (verify == null || StringUtil.isNotEmpty(verify.getCode(), true) == false) {
371372
showShortToast(R.string.get_failed);
372-
btnPasswordGetVerify.setText("重新获取");
373373
} else {
374374
Log.i(TAG, "发送成功");
375375
time.start();
@@ -379,7 +379,18 @@ public void run() {
379379
});
380380
break;
381381
case HTTP_REGISTER:
382-
onPasswordResponse(response.getJSONResponse(User.class.getSimpleName()), response.getObject(User.class));
382+
User user = response.getObject(User.class);
383+
dismissProgress();
384+
if (user == null || user.getId() <= 0 || JSONResponse.isSucceed(
385+
response.getJSONResponse(User.class.getSimpleName())) == false) {
386+
showShortToast("注册失败,请检查网络后重试");
387+
return;
388+
} else {
389+
showShortToast("注册成功");
390+
APIJSONApplication.getInstance().saveCurrentUser(user);
391+
392+
saveAndExit(newResult().putExtra(INTENT_ID, user.getId()));
393+
}
383394
break;
384395
case HTTP_RESET_PASSWORD:
385396
//TODO

APIJSON(Android)/APIJSON(ADT)/APIJSONApp/APIJSONApp/src/apijson/demo/client/util/HttpRequest.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -172,8 +172,6 @@ public static void register(String verify, String phone, String password, String
172172
.setTag(User.class.getSimpleName());
173173
request.put(KEY_VERIFY, verify);
174174
request.put(KEY_PASSWORD, password);
175-
// post(request, requestCode, listener);
176-
177175
HttpManager.getInstance().post(URL_POST + "register/user/", request, requestCode, listener);
178176
}
179177
/**重置密码
@@ -244,9 +242,8 @@ public static void getAuthCode(String phone, int requestCode, OnHttpResponseList
244242
HttpManager.getInstance().get(URL_POST + "authCode/" + phone, null, requestCode, listener);
245243
}
246244
public static void checkAuthCode(String phone, String code, int requestCode, OnHttpResponseListener listener) {
247-
// HttpManager.getInstance().get(URL_BASE + "check/authCode/" + phone + "/" + code, null, requestCode, listener);
248-
// postGet(new JSONRequest(new Verify(phone, verify)).setTag(Verify.class.getSimpleName()), requestCode, listener);
249-
postHead(new JSONRequest(new Verify(phone, code)).setTag(Verify.class.getSimpleName()), requestCode, listener);
245+
// postHead(new JSONRequest(new Verify(phone, code)).setTag(Verify.class.getSimpleName()), requestCode, listener);
246+
HttpManager.getInstance().get(URL_BASE + "check/authCode/" + phone + "/" + code, null, requestCode, listener);
250247
}
251248

252249
//account>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

APIJSON(Server)/APIJSON(Eclipse_JEE)/src/main/java/zuo/biao/apijson/JSONObject.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -145,15 +145,15 @@ public Object get(Object key, boolean decode) {
145145

146146
/**
147147
* encode = false
148-
* @param value
148+
* @param value must be annotated by {@link APIJSONRequest}
149149
* @return {@link #put(String, boolean)}
150150
*/
151151
public Object put(Object value) {
152152
return put(value, false);
153153
}
154154
/**
155155
* key = value.getClass().getSimpleName()
156-
* @param value
156+
* @param value must be annotated by {@link APIJSONRequest}
157157
* @param encode
158158
* @return {@link #put(String, Object, boolean)}
159159
*/
@@ -170,7 +170,14 @@ public Object put(Object value, boolean encode) {
170170
*/
171171
public Object put(String key, Object value, boolean encode) {
172172
if (StringUtil.isNotEmpty(key, true) == false) {
173-
key = value == null ? null : value.getClass().getSimpleName();
173+
Class<?> clazz = value == null ? null : value.getClass();
174+
if (clazz == null || clazz.getAnnotation(APIJSONRequest.class) == null) {
175+
throw new IllegalArgumentException("put StringUtil.isNotEmpty(key, true) == false" +
176+
" && clazz == null || clazz.getAnnotation(APIJSONRequest.class) == null" +
177+
" \n key为空时仅支持 类型被@APIJSONRequest注解 的value !!!" +
178+
" \n 如果一定要这么用,请对 " + clazz.getName() + " 注解!");
179+
}
180+
key = value.getClass().getSimpleName();
174181
}
175182
if (encode) {
176183
if (key.endsWith("+") || key.endsWith("-")) {

APIJSON(Server)/APIJSON(Eclipse_JEE)/src/main/java/zuo/biao/apijson/JSONRequest.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public JSONRequest() {
3030
}
3131
/**
3232
* encode = true
33-
* @param object
33+
* @param object must be annotated by {@link APIJSONRequest}
3434
* @see {@link #JSONRequest(String, Object)}
3535
*/
3636
public JSONRequest(Object object) {
@@ -46,7 +46,7 @@ public JSONRequest(String name, Object object) {
4646
this(name, object, true);
4747
}
4848
/**
49-
* @param object
49+
* @param object must be annotated by {@link APIJSONRequest}
5050
* @param encode
5151
* @see {@link #JSONRequest(String, Object, boolean)}
5252
*/
@@ -143,9 +143,10 @@ public Object putPath(String key, String... parts) {
143143

144144
/**
145145
* encode = true
146-
* @param value
146+
* @param value must be annotated by {@link APIJSONRequest}
147147
* @return {@link #put(String, boolean)}
148148
*/
149+
@Override
149150
public Object put(Object value) {
150151
return put(value, true);
151152
}

APIJSON(Server)/APIJSON(Eclipse_JEE)/src/main/java/zuo/biao/apijson/server/Controller.java

Lines changed: 27 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
package zuo.biao.apijson.server;
1616

1717
import java.util.Random;
18+
import java.util.concurrent.TimeoutException;
1819

1920
import org.springframework.web.bind.annotation.PathVariable;
2021
import org.springframework.web.bind.annotation.RequestBody;
@@ -127,12 +128,29 @@ public String getAuthCode(@PathVariable String phone) {
127128

128129
@RequestMapping("check/authCode/{phone}/{code}")
129130
public String checkAuthCode(@PathVariable String phone, @PathVariable String code) {
130-
if (StringUtil.isNumer(code) == false) {
131-
code = "-1";
131+
return JSON.toJSONString(checkVerify(phone, code));
132+
}
133+
134+
/**校验验证码
135+
* @param phone
136+
* @param code
137+
* @return
138+
*/
139+
public JSONObject checkVerify(String phone, String code) {
140+
JSONResponse response = new JSONResponse(new RequestParser(RequestMethod.POST_GET).parseResponse(new JSONRequest(
141+
new Verify(phone)).setTag(Verify.class.getSimpleName())));
142+
Verify verify = response.getObject(Verify.class);
143+
//验证码过期
144+
if (verify != null && System.currentTimeMillis() - verify.getDate() > 60000) {
145+
new RequestParser(RequestMethod.DELETE).parseResponse(new JSONRequest(new Verify(phone))
146+
.setTag(Verify.class.getSimpleName()));
147+
return RequestParser.newErrorResult(new TimeoutException("验证码已过期!"));
132148
}
133-
return new RequestParser(RequestMethod.POST_GET).parse(
134-
newVerifyRequest(newVerify(phone, Integer.parseInt(0 + StringUtil.getNumber(code)))));
149+
150+
return new JSONResponse(new RequestParser(RequestMethod.POST_HEAD).parseResponse(
151+
new JSONRequest(new Verify(phone, code))));
135152
}
153+
136154

137155
private JSONObject newVerify(String phone, int code) {
138156
JSONObject verify = new JSONObject(true);
@@ -174,17 +192,7 @@ public String login(@PathVariable String typeString, @PathVariable String phone,
174192
response = new JSONResponse(new RequestParser(RequestMethod.HEAD).parseResponse(
175193
new JSONRequest(new Password(User.class.getSimpleName(), phone, password))));
176194
} else {//verify
177-
response = new JSONResponse(new RequestParser(RequestMethod.POST_GET).parseResponse(new JSONRequest(
178-
new Verify(phone)).setTag(Verify.class.getSimpleName())));
179-
Verify verify = response.getObject(Verify.class);
180-
//验证码过期
181-
if (verify != null && System.currentTimeMillis() - verify.getDate() > 60000) {
182-
new RequestParser(RequestMethod.DELETE).parseResponse(new JSONRequest(new Verify(phone))
183-
.setTag(Verify.class.getSimpleName()));
184-
verify = null;
185-
}
186-
response = new JSONResponse(new RequestParser(RequestMethod.HEAD).parseResponse(
187-
new JSONRequest(new Verify(phone, password))));
195+
response = new JSONResponse(checkVerify(phone, password));
188196
}
189197
if (JSONResponse.isSucceed(response) == false) {
190198
return JSON.toJSONString(response);
@@ -241,17 +249,12 @@ public String register(@RequestBody String request) {
241249
// , new IllegalArgumentException("User.verify: " + verify + " 不合法!不能小于6个字符!")));
242250
// }
243251

244-
JSONResponse response = new JSONResponse(new RequestParser(RequestMethod.POST_GET).parseResponse(new JSONRequest(
245-
new Verify(phone)).setTag(Verify.class.getSimpleName())));
246-
Verify verify = response.getObject(Verify.class);
247-
//验证码过期
248-
if (verify != null && System.currentTimeMillis() - verify.getDate() > 60000) {
249-
new RequestParser(RequestMethod.DELETE).parseResponse(new JSONRequest(new Verify(phone))
250-
.setTag(Verify.class.getSimpleName()));
251-
verify = null;
252+
JSONResponse response = new JSONResponse(checkVerify(phone, user.getString("verify")));
253+
if (JSONResponse.isSucceed(response) == false) {
254+
return JSON.toJSONString(response);
252255
}
253256
//手机号或验证码错误
254-
if (verify == null || ("" + verify.getId()).equals(phone) == false) {
257+
if (JSONResponse.isExist(response.getJSONResponse(Verify.class.getSimpleName())) == false) {
255258
return JSON.toJSONString(RequestParser.extendErrorResult(requestObject
256259
, new ConditionNotMatchException("手机号或验证码错误!")));
257260
}

0 commit comments

Comments
 (0)