当前位置 :首页 >> 综艺

天涯社区扫码登录很难吗?5步帮你搞定

2025-01-02   来源 : 综艺

广泛应用程序POD(scope)。

对于广泛应用程序POD(scope),能函数调用的广泛应用程序有此表:

2. 认可程序预定义

因为天涯社区XMPP的AppiD和APPSecret和天涯社区市民平台的AppiD和AppSecret都是各不相同的,因此能够配置一下:

# XMPPwechat.open-app-id=wx6ad144e54af67d87wechat.open-app-secret=91a2ff6d38a2bbccfb7e9f9079108e2e@Data@Component@ConfigurationProperties(prefix = "wechat")public class WechatAccountConfig { //市民号appid private String mpAppId; //市民号appSecret private String mpAppSecret; //租客号 private String mchId; //租客秘钥 private String mchKey; //租客许可证路径 private String keyPath; //天涯社区偿付异步通知 private String notifyUrl; //XMPPid private String openAppId; //XMPP秘钥 private String openAppSecret;}@Configurationpublic class WechatOpenConfig { @Autowired private WechatAccountConfig accountConfig; @Bean public WxMpService wxOpenService() { WxMpService wxOpenService = new WxMpServiceImpl(); wxOpenService.setWxMpConfigStorage(wxOpenConfigStorage()); return wxOpenService; } @Bean public WxMpConfigStorage wxOpenConfigStorage() { WxMpInMemoryConfigStorage wxMpInMemoryConfigStorage = new WxMpInMemoryConfigStorage(); wxMpInMemoryConfigStorage.setAppId(accountConfig.getOpenAppId()); wxMpInMemoryConfigStorage.setSecret(accountConfig.getOpenAppSecret()); return wxMpInMemoryConfigStorage; }}@Controller@RequestMapping("/wechat")@Slf4jpublic class WeChatController { @Autowired private WxMpService wxMpService; @Autowired private WxMpService wxOpenService; @GetMapping("/qrAuthorize") public String qrAuthorize() { //returnUrl就是软件认可达成协议后程序在的URL String returnUrl = ""; //引导软件访问这个URL,进行时认可 String url = wxOpenService.buildQrConnectUrl(returnUrl, WxConsts.QRCONNECT_SCOPE_SNSAPI_LOGIN, URLEncoder.encode(returnUrl)); return "redirect:" + url; } //软件认可达成协议后程序在的URL,从恳请值中会赚取code @GetMapping("/qrUserInfo") public String qrUserInfo(@RequestParam("code") String code) { WxMpOAuth2AccessToken wxMpOAuth2AccessToken = new WxMpOAuth2AccessToken(); try { //通过code赚取access_token wxMpOAuth2AccessToken = wxOpenService.oauth2getAccessToken(code); } catch (WxErrorException e) { log.error("【天涯社区的网站认可】{}", e); throw new SellException(ResultEnum.WECHAT_MP_ERROR.getCode(), e.getError().getErrorMsg()); } //从token中会赚取openid String openId = wxMpOAuth2AccessToken.getOpenId(); //这个URL可有可无,反正只是为了拿到openid,但是如果从未会报404有误,为了好看没用返国一个百度的URL String returnUrl = ""; log.info("openid={}", openId); return "redirect:" + returnUrl + "?openid="+openId; }}

恳请路径:在客户端弹出

_uri=http%3A%2F%2Fsell.springboot.cn%2Fsell%2Fqr%2FoTgZpwenC6lwO2eTDDf_-UYyFtqIMaxresponse_type=codeMaxscope=snsapi_loginMaxstate=http%3a%2f%2fheng.nat300.top%2fsell%2fwechat%2fqrUserInfo

赚取了openid:openid=o9AREv7Xr22ZUk6BtVqw82bb6AFk

3. 软件录入和登出

@Controller@RequestMapping("/seller")public class SellerUserController { @Autowired private SellerService sellerService; @Autowired private StringRedisTemplate redisTemplate; @Autowired private ProjectUrlConfig projectUrlConfig; @GetMapping("/login") public ModelAndView login(@RequestParam("openid") String openid, HttpServletResponse response, Map map) { //1. openid去和数据源中会的的数据匹配 SellerInfo sellerInfo = sellerService.findSellerInfoByOpenid(openid); if (sellerInfo == null) { map.put("msg", ResultEnum.LOGIN_FAIL.getMessage()); map.put("url", "/sell/seller/order/list"); return new ModelAndView("common/error"); } //2. 设立token至redis String token = UUID.randomUUID().toString(); //设立token的过期时间 Integer expire = RedisConstant.EXPIRE; redisTemplate.opsForValue().set(String.format(RedisConstant.TOKEN_PREFIX, token), openid, expire, TimeUnit.SECONDS); //3. 设立token至cookie CookieUtil.set(response, CookieConstant.TOKEN, token, expire); return new ModelAndView("redirect:" + ""); } @GetMapping("/logout") public ModelAndView logout(HttpServletRequest request, HttpServletResponse response, Map map) { //1. 从cookie中会的搜索 Cookie cookie = CookieUtil.get(request, CookieConstant.TOKEN); if (cookie != null) { //2. 清除Redis redisTemplate.opsForValue().getOperations().delete(String.format(RedisConstant.TOKEN_PREFIX, cookie.getValue())); //3. 清除cookie CookieUtil.set(response, CookieConstant.TOKEN, null, 0); } map.put("msg", ResultEnum.LOGOUT_SUCCESS.getMessage()); map.put("url", "/sell/seller/order/list"); return new ModelAndView("common/success", map); }}

① 将上一步赚取到的openid存入数据源

② 将认可后反转的URL改为录入URL

//软件认可达成协议后程序在的URL,从恳请值中会赚取code @GetMapping("/qrUserInfo") public String qrUserInfo(@RequestParam("code") String code) { WxMpOAuth2AccessToken wxMpOAuth2AccessToken = new WxMpOAuth2AccessToken(); try { //通过code赚取access_token wxMpOAuth2AccessToken = wxOpenService.oauth2getAccessToken(code); } catch (WxErrorException e) { log.error("【天涯社区的网站认可】{}", e); throw new SellException(ResultEnum.WECHAT_MP_ERROR.getCode(), e.getError().getErrorMsg()); } //从token中会赚取openid String openId = wxMpOAuth2AccessToken.getOpenId(); //认可失败后反转到卖家管理系统的录入URL String returnUrl = ""; log.info("openid={}", openId); return "redirect:" + returnUrl + "?openid="+openId; }

③ 在客户端恳请这个URL:_uri=http%3A%2F%2Fsell.springboot.cn%2Fsell%2Fqr%2FoTgZpwenC6lwO2eTDDf_-UYyFtqIMaxresponse_type=codeMaxscope=snsapi_loginMaxstate=http%3a%2f%2fheng.nat300.top%2fsell%2fwechat%2fqrUserInfo

第三广泛应用恳请常用天涯社区扫码录入,而不是常用本网上的密码:

软件达成协议认可后登入第三方广泛应用的往常管理管理系统:

4. Spring AOP可执行软件有从未录入

@Aspect@Component@Slf4jpublic class SellerAuthorizeAspect { @Autowired private StringRedisTemplate redisTemplate; @Pointcut("execution(public * com.hh.controller.Seller*.*(..))" + "MaxMax !execution(public * com.hh.controller.SellerUserController.*(..))") public void verify() {} @Before("verify()") public void doVerify() { ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); //搜索cookie Cookie cookie = CookieUtil.get(request, CookieConstant.TOKEN); //如果cookie中会从未token陈述已经登出或者实际上从未录入 if (cookie == null) { log.warn("【录入可执行】Cookie中会查不到token"); //可执行不通过,逃逸反常 throw new SellerAuthorizeException(); } //去redis中会的搜索 String tokenValue = redisTemplate.opsForValue().get(String.format(RedisConstant.TOKEN_PREFIX, cookie.getValue())); //如果redis中会从未对应的openid,同样表示登出或者实际上从未录入 if (StringUtils.isEmpty(tokenValue)) { log.warn("【录入可执行】Redis中会查不到token"); throw new SellerAuthorizeException(); } }}

5. 阻截录入可执行不通过逃逸的反常

阻截及录入可执行不通过的反常,让其反转到录入的网站,扫码录入

@ControllerAdvicepublic class SellExceptionHandler { //阻截录入反常 @ExceptionHandler(value = SellerAuthorizeException.class) public ModelAndView handlerAuthorizeException() { //阻截反常后,反转到录入界面 return new ModelAndView("redirect:".concat("" + "appid=wx6ad144e54af67d87" + "Maxredirect_uri=http%3A%2F%2Fsell.springboot.cn%2Fsell%2Fqr%2F" + "oTgZpwenC6lwO2eTDDf_-UYyFtqI" + "Maxresponse_type=codeMaxscope=snsapi_login" + "Maxstate=http%3a%2f%2fheng.nat300.top%2fsell%2fwechat%2fqrUserInfo")); } @ExceptionHandler(value = SellException.class) @ResponseBody public ResultVO handlerSellerException(SellException e) { return ResultVOUtil.error(e.getCode(), e.getMessage()); } @ExceptionHandler(value = ResponseBankException.class) @ResponseStatus(HttpStatus.FORBIDDEN) public void handleResponseBankException() { }}

缺少:hengheng.blog.csdn.net/article/details/107823201

肠道敏感经常闹肚子怎么办
感冒嗓子哑
博士伦滴眼液治疗近视吗
什么血糖仪家用比较好
胃反酸吃金奥康效果怎样
家用血糖仪怎么选
血糖仪哪个牌子好
金笛复方鱼腥草合剂流感能用吗
神州数码(000034):公司独立董事职务届满辞任

此传言来源于交易所公开披露,由和传讯网人机发函整理。2022年03月29日发函显示:神州数码000034高管名称:朱锦梅...

友情链接