天涯社区扫码登录很难吗?5步帮你搞定
2025-01-02 来源 : 综艺
对于广泛应用程序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高管名称:朱锦梅...
-
合肥3年初一二手房销售价格环比继续双降
4年底15日,为政府面世了2022年3年底份70个大之中小城市商品层高卖出价格变动可能会。记者注意到,江阴扩建商品层高卖出价格指数环比下跌0.4%,二手层高卖出价格指数环比下跌0.2%,但增...[详细]
-
锦欣生殖(01951)延迟完成注资深圳中山医院15%股权及新合约安排
智通财经APP讯,锦欣生殖01951公告有关母公司广州中山医院15%股东及原先合约决定,由于有关母公司要点在珠海市市场监督海关总署的相关工商登记尚未完成,有关订约方已同意将完成的就此截止日期...[详细]
-
3月70城房价环比下降城市减少,乌鲁木齐新房价格跌幅领跑
,为70城北之中涨幅最大的小城北市;遵义二手房上升0.9%据统计;池州、长春市二手房环比上升0.8%,涨幅亦较大。 诸葛找房数据集研究之中心高级高盛陈霄表明,伊宁前川售价上半年遥遥领先...[详细]
-
过气主持人的卑贱:没工作、蹭朋友热度、县城混商演,一地的尴尬
影圈的一个谜。个人看来,可能主要还是不够短时间吧!就连呼延琳嘉本人,也在电视节目底下调侃,因为外表不够代表性,活该自己不红。 由于管理工作来得少,没人什么曝光率。因而,只要...[详细]
-
沣东地产:年少众将丨国之大者
,2021年12月底初,沣华熙城北一期交房也让业主感受到“良心厂商”。 值得谈到的是,作为同门师弟弟的沣东端肇始先后投入沣井水了了、沣井水云间,且都有不错的市场种系统,如此一来为 “沣东...[详细]