技术渣,遇到问题记录一下,好记性不如烂笔头嘛(应该是好记性不如写博客~~~~~~)
【问题】
在java后台写了获取验证码和注册的两个接口,提供给ios和Android调用。ios测试注册过程中都是一条过,但是Android就出现了很尴尬的问题【第一次请求发送验证码后,java把验证码存入session后,再请求注册接口中我取不到了放入session中的验证码了,很难受,技术渣也不知道咋回事,Android说我的问题,我说是Android的问题~~~~~~~~~~~~~~~】好了说一下解决办法。
【分析】
第二次取不到session中的验证码的原因是与Android跨域请求时出现sessionid不是同一个的问题
【解决方法】
在Android第一次请求获取验证码接口时把sessionid返回给Android,让Android在请求注册接口时在请求头上加上这个sessionid就大吉大利今晚吃鸡了~~~~~~~~~~~
【上代码】
获取验证码时返回sessionid
@RequestMapping(value = "AppGetCode")
@ResponseBody
public JsonResult<String> AppGetCode(HttpServletResponse response,
HttpServletRequest request, String phone) {
// 允许跨域请求
response.setHeader("Access-Control-Allow-Origin", "*");
//response.setHeader("Access-Control-Allow-Credentials","true");
if(phone!=null){
Client client=clientService.findUserByPhone(phone);
/*判断client是否为空,如果为空说明手机号没有注册,可以进行注册*/
if(client==null){
String code=String.valueOf(Math.random()).substring(2,8);
//发送验证码,并将验证码存入session
//发送短信API
Map<String, String> param = clnt.newParam(2);
param.put(YunpianClient.MOBILE, phone);
param.put(YunpianClient.TEXT, "【陆港云】您的验证码是"+code+"。如非本人操作,请忽略本短信");
clnt.sms().single_send(param);
/*>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<*/
HttpSession session=request.getSession();
String sessionId = session.getId();
session.setAttribute("code", code);
//String code1=(String)session.getAttribute("code");
return new JsonResult<String>(0, "发送验证码成功", sessionId);
}else{
return new JsonResult<String>(1, "手机号被占用", null);
}}
else{
return new JsonResult<String>(0, "手机号不能为空", null);
}
}
Android在请求时加上请求头信息
OkHttpUtils.post()
.url(ServerConfig.REMOTE_BASE_URL + ServerConfig.REGISTER_URL)
.addHeader("Cookie", "JSESSIONID=" + sessionId)
.addParams("account", account)
.addParams("phoneCode", phoneCode)
.addParams("password", password)
.build()
.execute(new StringCallback() {
好了 剧终了~~~~~~~~~~~(新手上路,有不足的地方还望大佬们指点迷津一下)
参考大佬博客:
https://blog.csdn.net/cjm2484836553/article/details/77341779