上一篇已经将uni-app的单机登陆完成了:https://blog.csdn.net/qq_43222167/article/details/106562615

java交互后台响应

将login.vue修改(这里注意的是用户名和密码的值与后台的对应)

<template><view class="content"><view class="input-group"><view class="input-row border"><text class="title">账号:</text><m-input class="m-input" type="text" clearable focus v-model="userName" placeholder="请输入账号"></m-input></view><view class="input-row"><text class="title">密码:</text><m-input type="password" displayable v-model="password" placeholder="请输入密码"></m-input></view></view><view class="btn-row"><button type="primary" class="primary" @tap="bindLogin">登录</button></view><view class="action-row"><navigator url="../reg/reg">注册账号</navigator><text>|</text><navigator url="../pwd/pwd">忘记密码</navigator></view><view class="oauth-row" v-if="hasProvider" v-bind:style="{top: positionTop + 'px'}"><view class="oauth-image" v-for="provider in providerList" :key="provider.value"><image :src="provider.image" @tap="oauth(provider.value)"></image><!-- #ifdef MP-WEIXIN --><button v-if="!isDevtools" open-type="getUserInfo" @getuserinfo="getUserInfo"></button><!-- #endif --></view></view></view>
</template><script>import service from '../../service.js';import {mapState,mapMutations} from 'vuex'import mInput from '../../components/m-input.vue'export default {components: {mInput},data() {return {providerList: [],hasProvider: false,userName: '',password: '',positionTop: 0,isDevtools: false,}},computed: mapState(['forcedLogin']),methods: {...mapMutations(['login']),initProvider() {const filters = ['weixin', 'qq', 'sinaweibo'];uni.getProvider({service: 'oauth',success: (res) => {if (res.provider && res.provider.length) {for (let i = 0; i < res.provider.length; i++) {if (~filters.indexOf(res.provider[i])) {this.providerList.push({value: res.provider[i],image: '../../static/img/' + res.provider[i] + '.png'});}}this.hasProvider = true;}},fail: (err) => {console.error('获取服务供应商失败:' + JSON.stringify(err));}});},initPosition() {/*** 使用 absolute 定位,并且设置 bottom 值进行定位。软键盘弹出时,底部会因为窗口变化而被顶上来。* 反向使用 top 进行定位,可以避免此问题。*/this.positionTop = uni.getSystemInfoSync().windowHeight - 100;},bindLogin() {/*** 客户端对账号信息进行一些必要的校验。* 实际开发中,根据业务需要进行处理,这里仅做示例。*//* if (this.userName.length < 5) {uni.showToast({icon: 'none',title: '账号最短为 5 个字符'});return;}if (this.password.length < 6) {uni.showToast({icon: 'none',title: '密码最短为 6 个字符'});return;} *//*** 下面简单模拟下服务端的处理* 检测用户账号密码是否在已注册的用户列表中* 实际开发中,使用 uni.request 将账号信息发送至服务端,客户端在回调函数中获取结果信息。*/const data = {userName: this.userName,password: this.password};uni.request({url:"http://localhost:8080/order/userLogin",method:"POST",data:data,success: (res) => {console.log(res);}})/* const validUser = service.getUsers().some(function(user) {return data.userName === user.userName && data.password === user.password;});if (validUser) {this.toMain(this.userName);} else {uni.showToast({icon: 'none',title: '用户账号或密码不正确',});} */},oauth(value) {uni.login({provider: value,success: (res) => {uni.getUserInfo({provider: value,success: (infoRes) => {/*** 实际开发中,获取用户信息后,需要将信息上报至服务端。* 服务端可以用 userInfo.openId 作为用户的唯一标识新增或绑定用户信息。*/this.toMain(infoRes.userInfo.nickName);},fail() {uni.showToast({icon: 'none',title: '登陆失败'});}});},fail: (err) => {console.error('授权登录失败:' + JSON.stringify(err));}});},getUserInfo({detail}) {if (detail.userInfo) {this.toMain(detail.userInfo.nickName);} else {uni.showToast({icon: 'none',title: '登陆失败'});}},toMain(userName) {this.login(userName);/*** 强制登录时使用reLaunch方式跳转过来* 返回首页也使用reLaunch方式*/if (this.forcedLogin) {uni.reLaunch({url: '../main/main',});} else {uni.navigateBack();}}},onReady() {this.initPosition();this.initProvider();// #ifdef MP-WEIXINthis.isDevtools = uni.getSystemInfoSync().platform === 'devtools';// #endif}}
</script><style>.action-row {display: flex;flex-direction: row;justify-content: center;}.action-row navigator {color: #007aff;padding: 0 10px;}.oauth-row {display: flex;flex-direction: row;justify-content: center;position: absolute;top: 0;left: 0;width: 100%;}.oauth-image {position: relative;width: 50px;height: 50px;border: 1px solid #dddddd;border-radius: 50px;margin: 0 20px;background-color: #ffffff;}.oauth-image image {width: 30px;height: 30px;margin: 10px;}.oauth-image button {position: absolute;left: 0;top: 0;width: 100%;height: 100%;opacity: 0;}
</style>

发送请求到后台…

发生了这么一个错,这个错是跨域问题,我们在后端提供了两种解决办法
1.在你的控制层的类上面加

@CrossOrigin(value = {"*"})

表示可以接收所有的请求


修改后发送请求

2.加入CorsConfig文件到你发送请求的项目中(要被SpringBoot扫描到)

package com.jbit.util;import org.springframework.context.annotation.Configuration;
import org.springframework.format.FormatterRegistry;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.validation.MessageCodesResolver;
import org.springframework.validation.Validator;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.HandlerMethodReturnValueHandler;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.config.annotation.*;import java.util.List;@Configuration
public class CorsConfig implements WebMvcConfigurer {@Overridepublic void configurePathMatch(PathMatchConfigurer pathMatchConfigurer) {}@Overridepublic void configureContentNegotiation(ContentNegotiationConfigurer contentNegotiationConfigurer) {}@Overridepublic void configureAsyncSupport(AsyncSupportConfigurer asyncSupportConfigurer) {}@Overridepublic void configureDefaultServletHandling(DefaultServletHandlerConfigurer defaultServletHandlerConfigurer) {}@Overridepublic void addFormatters(FormatterRegistry formatterRegistry) {}@Overridepublic void addInterceptors(InterceptorRegistry interceptorRegistry) {}@Overridepublic void addResourceHandlers(ResourceHandlerRegistry resourceHandlerRegistry) {}@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowedOrigins("*").allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS").allowCredentials(true).maxAge(3600).allowedHeaders("*");}@Overridepublic void addViewControllers(ViewControllerRegistry viewControllerRegistry) {}@Overridepublic void configureViewResolvers(ViewResolverRegistry viewResolverRegistry) {}@Overridepublic void addArgumentResolvers(List<HandlerMethodArgumentResolver> list) {}@Overridepublic void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> list) {}@Overridepublic void configureMessageConverters(List<HttpMessageConverter<?>> list) {}@Overridepublic void extendMessageConverters(List<HttpMessageConverter<?>> list) {}@Overridepublic void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> list) {}@Overridepublic void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> list) {}@Overridepublic Validator getValidator() {return null;}@Overridepublic MessageCodesResolver getMessageCodesResolver() {return null;}}

加入后发送请求

也已经得到

显示登陆成功的提示

只需要将success修改为

success: (res) => {console.log(res.data);let user=res.data;uni.showToast({icon:"success",title:"登陆成功,欢迎"+user.userName})this.login(user.userName)}

导入到微信小程序中使用

在HBuilder中的工具–>设置配置好微信小程序的路径

微信小程序中将代理打开

运行

等待加载成功

然后就可以在小程序中使用了

连接到手机(在微信小程序的真机调试中使用)

因为地址的原因,我们这里要使用到小米球Ngrok(内网穿透工具)
官网:http://ngrok.ciqiuwl.cn/
也可以在我的网盘中提取(我这里是windows64位操作系统的):链接:https://pan.baidu.com/s/1JbOVnnh8HLcBHxVCdsJNHw
提取码:p7sp
下载好之后对这个文件进行编辑

我们在这里只需要修改

这两个随意修改,只需要相同就好。还有一个

//对应的是你请求的端口号
proto:http: localhost:8080

修改好之后启动

输入第一步改的值

启动成功后复制值,这个代表的值为localhost:8080

放到HBuilder中(拼接出相应的请求路径)

一定要注意好url的地址正确,本人开始一直有个空格,导致一直发不出请求
微信小程序中点击

二维码出来后手机微信扫描后进入小程序登陆测试

在电脑的微信小程序启动的真机调试中也可以看到相应的值

uni-app与java的交互且使用小米球Ngrok连接到手机微信小程序相关推荐

  1. Java数字化智慧校园平台源码,智慧学校源码+微信小程序+人脸电子班牌

    这是一套JAVA语言开发的智慧校园源码,有演示,有文档,源码完整开源,商用级别,可以私信博主. 技术开发环境:Java+springboot+vue+element-ui+mysql 用的是最新的技术 ...

  2. java线下IT培训机构平台ssm培训课程成绩管理系统微信小程序源码和论文

    随着互联网的不断发展与微信及微信小程序的普遍应用,教育行业发生了重大变化,有关IT方面的线下培训机构也随之增加.如果线下IT培训机构可以利用线上管理取代传统的人工管理,那么将可以大大地降低工作量,提高 ...

  3. 【大白话学习】UniApp 微信小程序与APP应用 开发零基础入门教程(七)---登陆注销功能与微信小程序测试号的申请

    到此为止,我们只差一个退出登陆功能了. 回到index.vue页面,之前我们已经预留了退出按钮,现在给它加上功能 <button class="mybutton" type= ...

  4. 毕业季基于spring的基于安卓APP的基于ssm框架的基于微信小程序的管理系统设计与开发(开题+源码+讲解+论文)

    毕业设计考察的是同学的专业知识的运用能力,除了对技能的考核,还看重你的创新思维,这里面设计到内容繁琐复杂. 对于还未毕业没有过项目开发经验的同学是有些难度的,一个程序的开发小到1两个月,大至几个月甚至 ...

  5. 基于微信小程序菜谱查询app设计

    设计一个基于微信小程菜单查询app,一共有2个身份包括用户和管理员!用户通过微信小程序打开app后可以查询最新上架的菜谱信息,查询和查看菜谱详情信息,收藏自己喜欢的菜谱,发布留言和查看新闻公告!管理员 ...

  6. 微信小程序项目实战+JAVA SSM框架后台管理系统

    毕业设计做的是一个阅读微信小程序+后台管理系统 ,最后被评为优秀毕业设计,在此将项目源码及设计思路进行分享(文末含源码下载地址). 效果图如下: 一.系统开发环境 (1)Windows10操作系统 ( ...

  7. APP、微信小程序、网页H5

    APP.微信小程序.网页H5之间区别 1.APP 使用条件:苹果要去app store搜索下载,安卓需要在各应用商店搜素下载 更新条件:如需要修改内容,需要通过第三方审核 应用场景:适用于有较大流量, ...

  8. 微信小程序解密用户信息--java解密

    1.wx.login()方法获取code,通过code换取session_key 2.wx.getUserInfo()方法获取: encryptedData 包括敏感数据在内的完整用户信息的加密数据 ...

  9. java基本微信小程序的琴房预约管理系统 uniapp 小程序

    随着国家高等教育事业的快速发展,各种高等院校招生规模不断地扩大,而现有的教学场地资源未能跟上招生规模扩大的节奏,从而导致了高校学生与其相配套的教学资源的矛盾越来越加剧. 并且,随着高校招生规模的扩大, ...

  10. java监听微信_一种基于java后台应用监控微信小程序的用户访问量的方法与流程...

    本发明涉及java应用与微信小程序应用开发技术领域,具体涉及一种基于java后台应用监控微信小程序的用户访问量的方法. 背景技术: 微信小程序,简称小程序,是一种不需要下载安装即可使用的应用,它实现了 ...

最新文章

  1. Linux下Java Font 中文字体不显示
  2. 开发高性能JAVA应用程序基础(内存篇)
  3. SDH光端机概述与技术应用详解
  4. 部门年终总结大屏太难做?FVS开发模式用起来,附年终报告模板
  5. 大白话5分钟带你走进人工智能-第十九节逻辑回归之优化点(4)
  6. 使用Vivado保存仿真波形数据并读取
  7. Linux操作Oracle(9)——Oracle数据库导入导出方法详解 EXP IMP EXPDP IMPDP
  8. 老将回归,英特尔的复兴之路
  9. 机器学习的数学基础(一)—— 期望、方差、协方差与相关系数
  10. 【kali技巧】kali更新系统
  11. 京东架构专家分享京东架构之路
  12. 计算机屏幕分辨率设置,电脑怎么设置屏幕分辨率
  13. Python2020期末考试试题及答案
  14. 【ROS2原理11】C++编程的要点
  15. java程序调用时的调用规则,Java程序调用ILog规则出错
  16. Android获取NFC标签和NFC十进制16进制ID
  17. QS发布2021年世界大学排名!你报考的大学排第几?
  18. Win10电脑有网其他联网软件能正常使用但打不开浏览器怎么办?
  19. 互联网摸鱼日报(2022-09-16)
  20. CNSS数据与测量作业

热门文章

  1. 《OpenGL超级宝典第五版》Windows + VS2019配置
  2. OpenGL超级宝典(第7版)笔记22 原子计数器 清单5.31-5.34
  3. 爱企人事工资管理系统 v8.1 免费下载
  4. 机器学习基础知识(一):机器学习三大流派
  5. 电机学、电机拖动相关知识(试着更新电机的相关知识,感谢指出错误)
  6. 老毛桃u盘装系统linux,老毛桃如何安装iso系统_老毛桃u盘启动安装iso系统教程
  7. 基于单片机智能交通灯控制系统设计外文文献_1000多套机械专业毕业设计免费分享(论文+DWG图纸+外文翻译+文献综述+开题报告+答辩) 友图网...
  8. 工科生快速翻译英文文献的两个软件
  9. 新创建虚拟机如何配置ip地址
  10. 古代汉语(王力版)笔记 通论8-9