如今的生活中,登录网站也变得云云简朴,当你已登录一微信时,当你想要登录另一个网站时,只需扫码便可,但是人人晓得用Java怎样完成扫码受权吗?本文报告的就是关于如何用Java完成扫码受权登录,一起来相识一下吧。
假定如今有2个装备,A装备须要扫码受权上岸,B装备是已上岸了的装备。然后完成如下文所示,
一:A装备生成生成二维码:
A装备向服务器要求getLoginCode接口,这个接口依据要求的sessionId举行base64或其他加密体式格局举行加密,然后以此作为二维码的值,并将这个loginCode写到redis里,设置5分钟逾期。然后将这个loginCode返回给A装备,A装备以此值来生成上岸的二维码。
二:B装备扫码受权
B装备来扫A装备的二维码的时刻,照顾二维码的值,要求受权上岸的接口scanConfirmLogin,此接口里先校验二维码是不是逾期,没逾期的话举行背面的营业逻辑处置惩罚,将用户的基本信息和token写到redis里。
三:A装备轮询猎取受权状况
B装备以每秒一次的频次来刷 猎取用户受权状况接口,若状况为已受权,拿到用户信息去做背面的逻辑处置惩罚。
/** * 猎取扫描上岸的二维码 * @param noncestr随机字符串 * @throws Exception */ @RequestMapping(value = "user/getLoginCode.json") public void getLoginCode(String noncestr,HttpServletRequest request,HttpServletResponse response) throws Exception { if(StringUtil.isBlank(noncestr)){ apiData(request, response,ReqJson.error(CommonError.PARAMS_IMPERFECT)); return; } //参数的有效性校验在拦截器里完成 int expirationTime=300; //时效5分钟 final String sessionId=request.getSession().getId(); String loginCode=ToolUtils.getBase64(sessionId); JedisUtil.set(loginCode, loginCode, expirationTime); Map<String,Object> map=new HashMap<>(); map.put("loginCode", loginCode); map.put("expirationTime", expirationTime); apiData(request, response, ReqJson.ok(map)); } /** * 扫码确认上岸 * @param loginCode * @param request * @param response * @throws Exception */ @RequestMapping(value = "user/scanConfirmLogin.json") @AuthorizationApi public void scanConfirmLogin(@CurrentToken final Token token,String loginCode,HttpServletRequest request,HttpServletResponse response) throws Exception { if(StringUtil.isBlank(loginCode)){ apiData(request, response,ReqJson.error(CommonError.PARAMS_IMPERFECT)); return; } String userId=token.getUserId(); Map<String,String> map=new HashMap<>(); String loginTicket=JedisUtil.get(loginCode); if(StringUtil.isBlank(loginTicket)){ //二维码逾期 apiData(request, response,ReqJson.error(CommonError.TWO_DIMENSIONAL_CODE_HAS_EXPIRED)); return; } UserInfo userInfo = userInfoBiz.getUser(new UserInfo(userId)); if(userInfo==null){ apiData(request, response,ReqJson.error(UserError.USER_NOT_FOUND)); return; } //将用户信息放在缓存中 map.put(BaseConfig.ACCESS_TOKEN, token.getAccessToken()); map.put("userId", userInfo.getUserId()); map.put("rongCloudToken", userInfo.getRongCloudToken()); map.put("identity", userInfo.getIdentity()); JedisUtil.setMap(loginCode+"scanConfirmLogin", map, 300); apiData(request, response, ReqJson.ok(new Object())); } /** * 猎取上岸状况 * @param loginCode * @param request * @param response * @throws Exception */ @RequestMapping(value = "user/getScanConfirmLoginStatus.json") public void getLoginStatus(final String loginCode,HttpServletRequest request,HttpServletResponse response) throws Exception { if(StringUtil.isBlank(loginCode)){ apiData(request, response,ReqJson.error(CommonError.PARAMS_IMPERFECT)); return; } Map<String,String> map= JedisUtil.getMap(loginCode+"scanConfirmLogin"); if(map==null){ apiData(request, response,ReqJson.error(CommonError.AUTHORIZATION_HAS_EXPIRED)); return; } apiData(request, response, ReqJson.ok(map)); }
【引荐课程:Java视频课程】
以上就是Java完成二维码扫码受权上岸的细致内容,更多请关注ki4网别的相干文章!