久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

Android使用OKhttp3實現登錄注冊功能+springboot搭建后端的詳細過程

瀏覽:116日期:2023-02-09 10:35:50
目錄一、Android前端實現二、數據庫三、SpringBoot后端搭建四、部署至服務器五、運行測試一、Android前端實現

新建一個login的項目,主要的幾個文件在這里

Android使用OKhttp3實現登錄注冊功能+springboot搭建后端的詳細過程

1、gradle引入OKhttp3依賴

implementation ’com.squareup.okhttp3:okhttp:3.14.7’ implementation ’com.squareup.okio:okio:1.17.5’

2、activity_main.xml布局文件

<?xml version='1.0' encoding='utf-8'?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android='http://schemas.android.com/apk/res/android' xmlns:app='http://schemas.android.com/apk/res-auto' xmlns:tools='http://schemas.android.com/tools' android:layout_width='match_parent' android:layout_height='match_parent' tools:context='.MainActivity'> <EditTextandroid: android:layout_width='wrap_content'android:layout_height='wrap_content'android:hint='用戶名'android:textSize='34sp'app:layout_constraintBottom_toBottomOf='parent'app:layout_constraintEnd_toEndOf='parent'app:layout_constraintStart_toStartOf='parent'app:layout_constraintTop_toTopOf='parent'app:layout_constraintVertical_bias='0.051' /> <EditTextandroid: android:layout_width='wrap_content'android:layout_height='wrap_content'android:hint='密碼'android:textSize='34sp'app:layout_constraintBottom_toBottomOf='parent'app:layout_constraintEnd_toEndOf='parent'app:layout_constraintStart_toStartOf='parent'app:layout_constraintTop_toBottomOf='@+id/username'app:layout_constraintVertical_bias='0.067' /> <Buttonandroid: android:layout_width='wrap_content'android:layout_height='wrap_content'android:onClick='register'android:text='注冊'android:textSize='24sp'app:backgroundTint='#E91E63'app:layout_constraintBottom_toBottomOf='parent'app:layout_constraintEnd_toEndOf='parent'app:layout_constraintHorizontal_bias='0.501'app:layout_constraintStart_toStartOf='parent'app:layout_constraintTop_toBottomOf='@+id/password'app:layout_constraintVertical_bias='0.058' /> <Buttonandroid: android:layout_width='wrap_content'android:layout_height='wrap_content'android:onClick='getUser'android:text='獲取'android:textSize='24sp'app:backgroundTint='#E91E63'app:layout_constraintBottom_toBottomOf='parent'app:layout_constraintEnd_toEndOf='parent'app:layout_constraintHorizontal_bias='0.501'app:layout_constraintStart_toStartOf='parent'app:layout_constraintTop_toBottomOf='@+id/button3'app:layout_constraintVertical_bias='0.174' /> <Buttonandroid: android:layout_width='wrap_content'android:layout_height='wrap_content'android:text='登錄'android:textSize='24sp'app:backgroundTint='#E91E63'android:onClick='login'app:layout_constraintBottom_toBottomOf='parent'app:layout_constraintEnd_toEndOf='parent'app:layout_constraintHorizontal_bias='0.501'app:layout_constraintStart_toStartOf='parent'app:layout_constraintTop_toBottomOf='@+id/button'app:layout_constraintVertical_bias='0.113' /></androidx.constraintlayout.widget.ConstraintLayout>

3、AndroidManifest.xml配置文件

這里需要加上網絡請求權限,添加網絡權限的時候注意:在res目錄下新建xml目錄,創建network_security_config.xml文件

<?xml version='1.0' encoding='utf-8'?><network-security-config> <base-config cleartextTrafficPermitted='true' /></network-security-config>

并在配置文件中加入這行代碼:

android:networkSecurityConfig='@xml/network_security_config'

完整的AndroidManifest.xml文件如下

<?xml version='1.0' encoding='utf-8'?><manifest xmlns:android='http://schemas.android.com/apk/res/android' package='com.example.login'> <uses-permission android:name='android.permission.INTERNET'/> <uses-permission android:name='android.permission.WRITE_EXTERNAL_STORAGE' /> <uses-permission android:name='android.permission.READ_EXTERNAL_STORAGE' /> <applicationandroid:allowBackup='true'android:icon='@mipmap/ic_launcher'android:label='@string/app_name'android:roundIcon='@mipmap/ic_launcher_round'android:networkSecurityConfig='@xml/network_security_config'android:supportsRtl='true'android:theme='@style/Theme.Login'><activity android:name='.MainActivity'> <intent-filter><action android:name='android.intent.action.MAIN' /><category android:name='android.intent.category.LAUNCHER' /> </intent-filter></activity> </application></manifest>

4、創建User實體類

新建entity目錄創建User實體類。注意這里我是根據后端數據庫的字段創建的,在實現登錄注冊的時候只需要id,username,password 幾個基礎的字段就行,這里我比較多,讀者可以自行忽略。User.java

package com.example.login.entity;public class User { private Integer userId; private String userName; private String userPassword; private String currentVersion; private String latestVersion; private String updateDescription; private String headPortrait; private String nickName; private String vipTime; private String userCategory; private String registerDate; public User(Integer userId, String userName, String userPassword, String currentVersion, String latestVersion, String updateDescription, String headPortrait, String nickName, String vipTime, String userCategory, String registerDate) {this.userId = userId;this.userName = userName;this.userPassword = userPassword;this.currentVersion = currentVersion;this.latestVersion = latestVersion;this.updateDescription = updateDescription;this.headPortrait = headPortrait;this.nickName = nickName;this.vipTime = vipTime;this.userCategory = userCategory;this.registerDate = registerDate; } public User() { } public Integer getUserId() {return userId; } public void setUserId(Integer userId) {this.userId = userId; } public String getUserName() {return userName; } public void setUserName(String userName) {this.userName = userName; } public String getUserPassword() {return userPassword; } public void setUserPassword(String userPassword) {this.userPassword = userPassword; } public String getCurrentVersion() {return currentVersion; } public void setCurrentVersion(String currentVersion) {this.currentVersion = currentVersion; } public String getLatestVersion() {return latestVersion; } public void setLatestVersion(String latestVersion) {this.latestVersion = latestVersion; } public String getUpdateDescription() {return updateDescription; } public void setUpdateDescription(String updateDescription) {this.updateDescription = updateDescription; } public String getHeadPortrait() {return headPortrait; } public void setHeadPortrait(String headPortrait) {this.headPortrait = headPortrait; } public String getNickName() {return nickName; } public void setNickName(String nickName) {this.nickName = nickName; } public String getVipTime() {return vipTime; } public void setVipTime(String vipTime) {this.vipTime = vipTime; } public String getUserCategory() {return userCategory; } public void setUserCategory(String userCategory) {this.userCategory = userCategory; } public String getRegisterDate() {return registerDate; } public void setRegisterDate(String registerDate) {this.registerDate = registerDate; }}

LoginUser.java

public class LoginUser { private String userName; private String userPassword; public LoginUser(String userName, String userPassword) {this.userName = userName;this.userPassword = userPassword; } public LoginUser() { } public String getUserName() {return userName; } public void setUserName(String userName) {this.userName = userName; } public String getUserPassword() {return userPassword; } public void setUserPassword(String userPassword) {this.userPassword = userPassword; }}

5、MainActivity.java

package com.example.login;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.EditText;import android.widget.TextView;import android.widget.Toast;import com.example.login.entity.User;import org.json.JSONException;import org.json.JSONObject;import java.io.IOException;import okhttp3.Call;import okhttp3.Callback;import okhttp3.MediaType;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.RequestBody;import okhttp3.Response;public class MainActivity extends AppCompatActivity { private EditText username; private EditText password; private User user; @Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);username = findViewById(R.id.username);password = findViewById(R.id.password); } public void register(View view) {user = new User();user.setUserName(username.getText().toString());user.setUserPassword(password.getText().toString());Log.d('whqusername',username.getText().toString());Log.d('whqpassword',password.getText().toString());new Thread(new Runnable() { @Override public void run() {MediaType JSON = MediaType.parse('application/json;charset=utf-8');JSONObject jsonObject = new JSONObject();OkHttpClient httpClient = new OkHttpClient();try { jsonObject.put('userId',10); jsonObject.put('userName',user.getUserName()); jsonObject.put('userPassword',user.getUserPassword()); jsonObject.put('currentVersion',null); jsonObject.put('latestVersion',null); jsonObject.put('updateDescription',null); jsonObject.put('headPortrait',null); jsonObject.put('nickName',user.getUserName()); jsonObject.put('vipTime',null); jsonObject.put('userCategory',null); jsonObject.put('registerDate',null);} catch (JSONException e) { e.printStackTrace();}RequestBody requestBody = RequestBody.create(JSON, String.valueOf(jsonObject));String url = 'http://ip:8001/server/user/addUser/';Request request = new Request.Builder().url(url).post(requestBody).build();Call call = httpClient.newCall(request);call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) {Log.d('whq','失敗了'); } @Override public void onResponse(Call call, Response response) throws IOException {Log.d('whq',response.toString()+'------------------');Log.d('whq',response.body().toString()+'------------------'); }}); }}).start(); } public void getUser(View view) {OkHttpClient httpClient = new OkHttpClient();String url = 'http://ip:8001/server/user/getAllUserName';Request getRequest = new Request.Builder().url(url).get().build();Call call = httpClient.newCall(getRequest);new Thread(new Runnable() { @Override public void run() {try { //同步請求,要放到子線程執行 Response response = call.execute(); Log.i('whq+getAllUserName', 'okHttpGet run: response:'+ response.body().string());} catch (IOException e) { e.printStackTrace();} }}).start(); } public void login(View view) {loginUser = new LoginUser();loginUser.setUserName(username.getText().toString());loginUser.setUserPassword(password.getText().toString());new Thread(new Runnable() { @Override public void run() {MediaType JSON = MediaType.parse('application/json;charset=utf-8');JSONObject jsonObject = new JSONObject();OkHttpClient httpClient = new OkHttpClient();try { jsonObject.put('userName',loginUser.getUserName()); jsonObject.put('userPassword',MD5.encrypt(loginUser.getUserPassword()));} catch (JSONException e) { e.printStackTrace();}RequestBody requestBody = RequestBody.create(JSON, String.valueOf(jsonObject));String url = 'http://ip:8001/server/user/login';Request request = new Request.Builder().url(url).post(requestBody).build();Call call = httpClient.newCall(request);call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) {Log.d('whq登錄','失敗了'); } @Override public void onResponse(Call call, Response response) throws IOException {String MyResult = response.body().string();Log.d('whq登錄',response+'---------response---------');Log.d('whq登錄',response.message()+'---------message---------');Log.d('whq登錄',response.body().toString()+'------------------');Log.d('whq登錄',MyResult+'-----------MyResult-------'); }}); }}).start(); }}

到這里就實現了Android的前端實現。

二、數據庫

數據庫就是簡單的一個user表

SET NAMES utf8mb4;SET FOREIGN_KEY_CHECKS = 0;-- ------------------------------ Table structure for user-- ----------------------------DROP TABLE IF EXISTS `user`;CREATE TABLE `user` ( `userId` int(11) NOT NULL AUTO_INCREMENT, `userName` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `userPassword` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `currentVersion` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `latestVersion` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `updateDescription` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `headPortrait` mediumblob NULL, `nickName` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `vipTime` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `userCategory` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT ’normal’, `registerDate` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, PRIMARY KEY (`userId`, `userName`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 13 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;SET FOREIGN_KEY_CHECKS = 1;三、SpringBoot后端搭建

后端搭建用到的是SSM框架

1、新建一個springboot項目,添加依賴

pom.xml文件。這里有mybatis-plus+swagger+velocity,使用了代碼生成器

<properties><java.version>1.8</java.version><mybatis-plus.version>3.0.5</mybatis-plus.version><swagger.version>2.7.0</swagger.version><jodatime.version>2.10.1</jodatime.version><poi.version>3.17</poi.version><httpclient.version>4.5.1</httpclient.version><gson.version>2.8.2</gson.version><velocity.version>2.0</velocity.version> </properties><dependencies> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId> </dependency> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope> </dependency> <!--Spring Cloud--> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Hoxton.RELEASE</version><type>pom</type><scope>import</scope> </dependency> <!--mybatis-plus 持久層--> <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatis-plus.version}</version> </dependency> <!-- velocity 模板引擎, Mybatis Plus 代碼生成器需要 --> <dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId><version>${velocity.version}</version> </dependency> <!--swagger--> <dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>${swagger.version}</version> </dependency> <!--swagger ui--> <dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>${swagger.version}</version> </dependency> <!--日期時間工具--> <dependency><groupId>joda-time</groupId><artifactId>joda-time</artifactId><version>${jodatime.version}</version> </dependency> <!--mysql--> <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId> </dependency> <!--lombok用來簡化實體類:需要安裝lombok插件--> <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId> </dependency> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency></dependencies>

2、application.properties文件

# 服務端口server.port=8001# 服務名spring.application.name=heartrate# 環境設置:dev、test、prodspring.profiles.active=dev# mysql數據庫連接spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driverspring.datasource.url=jdbc:mysql://ip:3310/heartrate?serverTimezone=GMT%2B8&useSSL=falsespring.datasource.username=rootspring.datasource.password=123456#返回json的全局時間格式spring.jackson.date-format=yyyy-MM-dd HH:mm:ssspring.jackson.time-zone=GMT+8##mybatis日志//要使用logback日志,就需要注釋掉#mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl#配置mapper xml文件的路徑mybatis-plus.mapper-locations=classpath:com/atguigu/eduservice/mapper/xml/*.xml

這里的數據庫連接發現我是使用3310端口,因為我的服務器是使用docker創建數據庫的。請自行查看我之前的文章。

3、CodeGenerator.java代碼生成器

import com.baomidou.mybatisplus.annotation.DbType;import com.baomidou.mybatisplus.annotation.IdType;import com.baomidou.mybatisplus.generator.AutoGenerator;import com.baomidou.mybatisplus.generator.config.DataSourceConfig;import com.baomidou.mybatisplus.generator.config.GlobalConfig;import com.baomidou.mybatisplus.generator.config.PackageConfig;import com.baomidou.mybatisplus.generator.config.StrategyConfig;import com.baomidou.mybatisplus.generator.config.rules.DateType;import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;import org.junit.Test;/** * @author ahuwhq * @since 2021/7/27 */public class CodeGenerator { @Test public void run() {// 1、創建代碼生成器AutoGenerator mpg = new AutoGenerator();// 2、全局配置GlobalConfig gc = new GlobalConfig();String projectPath = System.getProperty('user.dir');//這里改成自己的目錄gc.setOutputDir('E:LaboratoryCodeserviceserver' + '/src/main/java');gc.setAuthor('ahuwhq');gc.setOpen(false); //生成后是否打開資源管理器gc.setFileOverride(false); //重新生成時文件是否覆蓋gc.setServiceName('%sService');//去掉Service接口的首字母Igc.setIdType(IdType.ID_WORKER_STR); //主鍵策略gc.setDateType(DateType.ONLY_DATE);//定義生成的實體類中日期類型gc.setSwagger2(true);//開啟Swagger2模式mpg.setGlobalConfig(gc);// 3、數據源配置DataSourceConfig dsc = new DataSourceConfig();//這里的數據庫改為自己的dsc.setUrl('jdbc:mysql://ip:3310/heartrate?serverTimezone=GMT%2B8');dsc.setDriverName('com.mysql.cj.jdbc.Driver');dsc.setUsername('root');dsc.setPassword('123456');dsc.setDbType(DbType.MYSQL);mpg.setDataSource(dsc);// 4、包配置PackageConfig pc = new PackageConfig();pc.setParent('com.message');pc.setModuleName('server'); //模塊名pc.setController('controller');pc.setEntity('entity');pc.setService('service');pc.setMapper('mapper');mpg.setPackageInfo(pc);// 5、策略配置StrategyConfig strategy = new StrategyConfig();//這里是對應的數據庫的表strategy.setInclude('user');strategy.setNaming(NamingStrategy.underline_to_camel);//數據庫表映射到實體的命名策略strategy.setTablePrefix(pc.getModuleName() + '_'); //生成實體時去掉表前綴strategy.setColumnNaming(NamingStrategy.underline_to_camel);//數據庫表字段映射到實體的命名策略strategy.setEntityLombokModel(true); // lombok 模型 @Accessors(chain = true) setter鏈式操作strategy.setRestControllerStyle(true); //restful api風格控制器strategy.setControllerMappingHyphenStyle(true); //url中駝峰轉連字符mpg.setStrategy(strategy);// 6、執行mpg.execute(); }}

點擊運行就會自動生成文件

Android使用OKhttp3實現登錄注冊功能+springboot搭建后端的詳細過程

4、添加config目錄

這里的config目錄代碼生成器沒有幫我們生成,我們添加這個目錄主要是想使用swagger測試(SwaggerConfig),并且代碼生成器生成文件之后,我們需要配置一下能掃描到mapper文件(ServerConfig)

ServerConfig.java

package com.message.server.config;import com.baomidou.mybatisplus.core.injector.ISqlInjector;import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;import org.mybatis.spring.annotation.MapperScan;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configuration@MapperScan('com.message.server.mapper')public class ServerConfig { /** * 邏輯刪除插件 */ @Bean public ISqlInjector sqlInjector() {return new LogicSqlInjector(); } /** * 分頁插件 */ @Bean public PaginationInterceptor paginationInterceptor() {return new PaginationInterceptor(); }}

SwaggerConfig.java

import com.google.common.base.Predicates;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import springfox.documentation.builders.ApiInfoBuilder;import springfox.documentation.builders.PathSelectors;import springfox.documentation.service.ApiInfo;import springfox.documentation.service.Contact;import springfox.documentation.spi.DocumentationType;import springfox.documentation.spring.web.plugins.Docket;import springfox.documentation.swagger2.annotations.EnableSwagger2;@Configuration//配置類@EnableSwagger2//swagger2注解public class SwaggerConfig { @Bean public Docket webApiConfig(){return new Docket(DocumentationType.SWAGGER_2).groupName('webApi').apiInfo(webApiInfo()).select()//.paths(Predicates.not(PathSelectors.regex('/admin/.*'))).paths(Predicates.not(PathSelectors.regex('/error.*'))).build(); } private ApiInfo webApiInfo(){return new ApiInfoBuilder().title('網站-課程中心API文檔').description('本文檔描述了課程中心微服務接口定義').version('1.0').contact(new Contact('java', 'http://ahuwhq.com', 'ahuwhq@163.com')).build(); }}

5、Controller層實現 UserController.java

這里我實現了好多種方法,不僅是登錄注冊,但是Android前段我們只用到登錄注冊和獲取全部用戶

import com.message.server.entity.User;import com.message.server.entity.vo.UserAll;import com.message.server.service.UserService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.*;import java.util.List;/** * <p> * 前端控制器 * </p> * * @author ahuwhq * @since 2021-07-27 */@RestController@RequestMapping('/server/user')public class UserController { //訪問地址:http://ip:8001/server/user/findAll 最終部署到服務器時使用這個來訪問 //訪問地址:http://localhost:8001/server/user/findAll 這是本地測試地址也是Swagger地址 @Autowired private UserService userService; /** * 查詢所有的用戶 * @return */ @GetMapping('getAllUsers') public List<User> findAllUser(){//調用方法查詢List<User> list = userService.list(null);return list; } /** * 添加用戶,注冊功能 * @param user * @return */ @PostMapping('addUser') public Boolean addUser(@RequestBody User user){boolean save = userService.save(user);return save; } /** * 獲取所有用戶名 */ @GetMapping('getAllUserName') public List<UserAll> getAllUserName(){List<UserAll> userNamelist = userService.getAllUserName();return userNamelist; } /** * 根據用戶ID查詢用戶的昵稱 * @param id * @return */ @GetMapping('getUserNickname/{id}') public String getUserNickname(@PathVariable Integer id){User user = userService.getById(id);String nickName = user.getNickName();return nickName; } /** *修改密碼 * @param userName * @return */ @PostMapping('changePassword/{userName}/{password}') public Boolean changePassword(@PathVariable String userName, @PathVariable String password){Boolean result = userService.changePassword(userName,password);return result; } /** * 用戶的登錄功能PostMapping * @param loginuser * @return */ @PostMapping('login') public R login(@RequestBody loginUser loginuser){String token = userService.login(loginuser);if (token == 'wrong Password'){ return R.error().data('result',token);}else{ return R.ok().data('result',token);} }}

這里用到了幾個文件R.java,ResultCode.java,MyException.javaR.java

//統一返回結果import io.swagger.annotations.ApiModelProperty;import lombok.Data;import java.util.HashMap;import java.util.Map;@Datapublic class R { @ApiModelProperty(value = '是否成功') private Boolean success; @ApiModelProperty(value = '返回碼') private Integer code; @ApiModelProperty(value = '返回消息') private String message; @ApiModelProperty(value = '返回數據') private Map<String, Object> data = new HashMap<String, Object>(); //構造方法私有化 private R(){} //鏈式編程 //成功靜態方法 public static R ok(){R r = new R();r.setSuccess(true);r.setCode(ResultCode.SUCCESS);r.setMessage('成功');return r; } //失敗靜態方法 public static R error(){R r = new R();r.setSuccess(false);r.setCode(ResultCode.ERROR);r.setMessage('失敗');return r; } public R success(Boolean success){this.setSuccess(success);return this; } public R message(String message){this.setMessage(message);return this; } public R code(Integer code){this.setCode(code);return this; } public R data(String key, Object value){this.data.put(key, value);return this; } public R data(Map<String, Object> map){this.setData(map);return this; }}

ResultCode.java

public interface ResultCode { public static Integer SUCCESS = 20000;//成功 public static Integer ERROR = 20001;//失敗}

MyException.java

import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;@Data@AllArgsConstructor//生成有參構造方法@NoArgsConstructor//生成無參構造方法public class MyException extends RuntimeException{ private Integer code;//狀態碼 private String msg;//異常信息}

5、UserService接口

public interface UserService extends IService<User> { /** * 獲取所有用戶名 * @return */ List<UserAll> getAllUserName(); /** * 修改密碼 * @param userName * @return */ Boolean changePassword(String userName,String password); /** * 用戶的登錄功能 * @param userName * @param password * @return */ Boolean login(String userName, String password);}

6、UserServiceImpl.java

public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { @Autowired private UserService userService; /** * 獲取所有用戶名 */ @Override public List<UserAll> getAllUserName() {//創建一個構造器QueryWrapper<User> wrapper = new QueryWrapper<>();//查詢所有的userNamewrapper.eq('userName',0);//重新封裝一個UserAll的類,專門來查詢所有用戶名List<User> users = baseMapper.selectList(wrapper);List<UserAll> userAlls = new ArrayList<>();for (int i = 0; i < users.size(); i++) { User user = users.get(i); String userName = user.getUserName(); UserAll userAll = new UserAll(); userAll.setUserName(userName); userAlls.add(userAll);}return userAlls ; } /** * 修改密碼 * @param userName * @param password * @return */ @Override public Boolean changePassword(String userName,String password) {QueryWrapper<User> wrapper = new QueryWrapper<>();wrapper.eq('userName',userName);User user = baseMapper.selectOne(wrapper);if (user == null){ return false;}user.setUserPassword(password);boolean save = userService.update(user,null);return save; } /** * 用戶的登錄功能PostMapping * @param loginuser * @return */ @Override public String login(loginUser loginuser) {String userName = loginuser.getUserName();String userPassword = loginuser.getUserPassword();//用戶名和密碼非空判斷if(org.springframework.util.StringUtils.isEmpty(userName) || org.springframework.util.StringUtils.isEmpty(userPassword)) { return 'wrong Password';}//判斷手機號是否正確QueryWrapper<User> wrapper = new QueryWrapper<>();wrapper.eq('userName',userName);User user = baseMapper.selectOne(wrapper);//判斷密碼//因為存儲到數據庫密碼肯定加密的//把輸入的密碼進行加密,再和數據庫密碼進行比較//加密方式 MD5if(!userPassword.equals(user.getUserPassword())) { return 'wrong Password';}else { return 'success login';} }}

注意:第一個獲取所有用戶名的方法會發現我自己生成一個實體類,原因是我的數據庫表里面有很多字段,但是我在前端展示的時候只能顯示幾個字段,就是起到保護隱私安全的作用。所以我新建了UserAll類。不影響閱讀這些邏輯。Android使用OKhttp3實現登錄注冊功能+springboot搭建后端的詳細過程UserAll.java

@Datapublic class UserAll { private String userName;}

7、運行springboot

這就是全部代碼,我們運行之后啟動成功。然后打開swagger測試

Android使用OKhttp3實現登錄注冊功能+springboot搭建后端的詳細過程

這里就可以進行接口測試。這里就不進行展示了。

四、部署至服務器

我們使用maven打包。點擊package。就可以生成jar包了。

Android使用OKhttp3實現登錄注冊功能+springboot搭建后端的詳細過程

然后上傳至服務器。

Android使用OKhttp3實現登錄注冊功能+springboot搭建后端的詳細過程

這里我們就使用 java -jar server-0.0.1-SNAPSHOT.jar 命令運行起來就可以了。

Android使用OKhttp3實現登錄注冊功能+springboot搭建后端的詳細過程

這樣就跑起來了。

注意:這里有一個坑,要看服務器8001的端口有沒有開放,否則是不能通過ip訪問到的。

firewall-cmd --list-portfirewall-cmd --zone=public --add-port=8001/tcp --permanentfirewall-cmd --reloadfirewall-cmd --query-port=8001/tcp

firewall-cmd --zone=public --remove-port=8001/tcp --permanent # 刪除netstat -anp|grep 8001

Android使用OKhttp3實現登錄注冊功能+springboot搭建后端的詳細過程

然后打開一個接口

Android使用OKhttp3實現登錄注冊功能+springboot搭建后端的詳細過程

五、運行測試

打開AS ,運行APP,打印日志

Android使用OKhttp3實現登錄注冊功能+springboot搭建后端的詳細過程

簡單的登錄注冊基本功能邏輯就已經實現了,大致流程可以走通。接下來就可以繼續開發其他了。注:這里只是最基本的登錄注冊,還不完善,比如這里密碼用戶名是明文傳送,很容易被抓包,所以這篇花了一點時間做的demo,并不完善,后面會補充完整。

到此這篇關于Android使用OKhttp3實現登錄注冊功能+springboot搭建后端的文章就介紹到這了,更多相關Android后端springboot內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
主站蜘蛛池模板: 夜夜爽99久久国产综合精品女不卡 | 国产精品久久久久久久久 | 日韩欧美精品一区二区三区 | 狠狠躁夜夜躁人人爽视频 | 国产成人精品亚洲日本在线观看 | 国产精品久久久久久久久久久久冷 | www.色.com| 日韩中文字幕电影 | 亚洲成人免费视频 | 亚洲乱码一区二区三区在线观看 | 超碰官网 | 欧美一级内谢 | 国产在线观看一区二区 | 精品乱码一区二区 | 国产91视频在线观看 | 国产伦精品一区二区三区四区视频 | 亚洲精品在线免费 | 天天拍天天草 | 中文字幕在线观看 | 成人一级片视频 | 国产精品亚洲一区二区三区 | 在线成人免费视频 | 亚州精品视频 | 久久久久久久国产精品 | 日韩靠逼 | 欧美日韩中文字幕在线播放 | 欧美激情一区二区 | 成人免费av | 不卡久久 | 国产精品视屏 | 日韩视频www| 91九色porny首页最多播放 | 日韩一区二区三区四区五区 | 日日爱夜夜操 | 国产免费一区二区 | 中文字幕在线免费 | 国产在线一区二区 | 久久国产精品免费一区二区三区 | 中文字幕在线精品 | 中文字幕在线观看不卡视频 | 欧美国产精品一区 | 欧洲精品在线观看 | 91亚洲狠狠婷婷综合久久久 | 久久精品一区二区三区四区 | 精品日韩一区二区 | 久久久久久久中文 | 国产在线一区不卡 | 国产成人午夜精品影院游乐网 | 欧美日韩亚洲在线 | 国产在视频一区二区三区吞精 | 国产a免费 | 精品久久久久久久久久久久久久久久久久久 | 亚洲一区二区在线 | 一二区精品 | 天天舔日日干 | 国精产品99永久一区一区 | 最新亚洲黄色网址 | 久久久香蕉| 免费观看一级特黄欧美大片 | 亚洲精选国产 | 国产高清免费 | 亚洲精品影院 | 国产成人午夜精品影院游乐网 | 欧美日韩亚洲二区 | 91免费在线视频 | 黑色丝袜脚足j国产在线看68 | 中文字幕一区二区三区四区 | 操视频网站 | 日本成人在线视频网站 | 欧美二区在线 | 日韩1| 免费视频一区 | 日韩精品专区在线影院重磅 | 黄色一级在线观看 | 一区二区三区国产视频 | 一级黄色片欧美 | 国产一区二区在线免费观看 | 免费观看一区二区三区毛片 | 亚洲精品久久久久一区二区三区 | 91精品国产91久久久久久最新 | 九九免费观看全部免费视频 | 国产日韩精品视频 | 免费观看黄视频 | 一区二区免费播放 | 色婷婷av久久久久久久 | 国产一级免费视频 | 亚洲人成人一区二区在线观看 | 欧美一二三区在线 | 欧美日韩一区在线观看 | 亚洲精品久久久久久久久久久 | 欧美第一页 | 精品一区二区三区免费 | www日韩 | 成人午夜免费网站 | 成人小视频在线看 | 成年视频在线观看福利资源 | 亚洲热在线视频 | 国产精品亚洲一区 | www.国产| 久久国产精品精品国产 | 亚洲一区二区在线视频 | 亚洲成人一区二区三区 | 亚洲欧美在线观看 | 日本不卡视频 | 中文字幕一区在线观看视频 | 日韩在线小视频 | 国产目拍亚洲精品99久久精品 | 成人亚洲网站 | 久久国产精品视频观看 | 91精彩视频在线观看 | 日韩一区二区精品 | 午夜一级片 | 国产精品亚洲a | 国产精品视频免费播放 | 91久久久久久久久 | www.啪啪 | 在线观看国产视频 | 91精品视频在线 | 国产成人av电影 | 久久精品国产一区二区电影 | 91精品视频在线播放 | 久久久99国产精品免费 | 欧美精品在线一区二区 | 欧美日韩在线精品 | 一区二区三区四区免费观看 | 久久久久久一区二区 | 中文字幕亚洲视频 | 欧美日韩亚洲国内综合网 | 亚洲一区二区在线 | 日韩视频在线一区 | 1000部精品久久久久久久久 | 野狼在线社区2017入口 | 欧美自拍三区 | 日韩一区二区三区在线观看 | 欧美 日韩 国产 一区 | 蜜臀网 | 国产精品成人在线观看 | 国产欧美综合一区二区三区 | 伊人久久爱 | 国产一级免费在线观看 | 久草在线高清 | 91视频免费观看网址 | 在线国产一区二区 | 三级黄色片在线观看 | 久久成人精品一区二区三区 | 日韩精品 电影一区 亚洲 | 免费观看黄视频 | 国产一级视频免费观看 | 亚洲毛片网站 | 久热久热 | www.9191| 亚洲精品自拍 | 亚洲成人精品在线 | 欧美激情精品一区 | a黄视频 | 欧美精品激情 | 午夜国产羞羞视频免费网站 | 国产一区二区三区久久久 | 中文字幕一区二区三 | 永久av| 婷婷激情五月 | 欧美日一区二区 | 日韩午夜 | 亚洲电影一区二区 | julia中文字幕久久一区二区 | 亚洲精品综合中文字幕 | 久久久久久久av | 国产精品a免费一区久久电影 | 亚洲成人国产精品 | 一区二区三区在线看 | 亚洲毛片 | 羞羞视频网站 | 91视频观看| 欧美日韩中文字幕 | 中文字幕在线看 | 国产精品毛片 | 亚洲香蕉精品 | 精品亚洲一区二区 | 精品视频一区二区三区 | 91久色| 亚洲国产精品一区 | 国产精品欧美一区二区 | 精品一区二区三区四区五区 | www.成人国产| 在线看av网址 | 日韩三级黄 | 国产精品久久久久国产精品 | 国产亚洲欧美一区二区三区 | 日韩一级 | 中文字幕 视频一区 | 中文字幕精品一区久久久久 | 伊人免费网 | 国产私拍视频 | 久久久精品网站 | 亚洲精品日韩精品 | 国产精品一区二区三区在线 | 九色91视频 | 久久久精品亚洲 | 久久亚洲一区 | 五月婷婷在线观看视频 | 91麻豆久久久 | 免费三级电影网站 | 色婷婷亚洲一区二区三区 | 91社影院在线观看 | 中文字幕天天操 | 日韩av高清在线 | 久久久久国产一区二区三区 | 视频精品一区 | 五月婷亚洲 | 欧美成人一区二区三区片免费 | 国产一区二区在线播放 | hd国产人妖ts另类视频 | 亚洲成人综合在线 | 亚洲精品乱码久久久久久久久 | 国产一区二区在线免费观看 | 级毛片| 成人精品视频 | 99成人| 国产在线观看欧美 | 色婷婷基地 | av 一区二区三区 | 国产高清一区二区 | av先锋资源 | 99影视 | 欧美一区二区三区免费 | 亚洲国产成人av | 99色综合| 午夜婷婷激情 | 能直接看的av网站 | 中文字幕一区二区三区不卡 | 先锋av资源网 | 亚洲综合电影 | 亚洲欧美在线免费观看 | 日韩精品在线播放 | 久久av免费| 91看片网 | 国产视频久久久久久 | 亚洲欧洲视频 | 日韩一区二区三区视频 | 亚洲精品久久久 | 亚洲精品大片 | 91精品国产92 | 中文字幕在线视频第一页 | 一二三区精品 | 天堂av在线免费观看 | 精品一区二区在线观看 | 草久久久 | 日日摸日日碰夜夜爽亚洲精品蜜乳 | 亚洲免费精品 | 91性高湖久久久久久久久网站 | 久久久精品久久久 | 色综合免费| 超碰8| 免费看爱爱视频 | 久久久精品亚洲 | 狠狠夜夜| 无码日韩精品一区二区免费 | 91精品国产综合久久久久久丝袜 | 欧美一区二区三区在线视频观看 | 伊人激情影院 | 婷婷在线视频 | 国产偷录视频叫床高潮对白 | 久久久久久久久久久久91 | 第一色综合 | 国产精品久久久久一区二区三区 | 99久久精品免费看国产免费软件 | 一级一级黄色片 | 亚洲视频在线观看 | 中文字幕日韩在线视频 | 青青草久草| 91影院| 久久国产欧美一区二区三区精品 | 亚洲天堂男人 | 奇米影视奇米色777欧美 | 欧美香蕉 | 99热免费在线| 国产精品精品视频一区二区三区 | 亚州视频在线 | 亚洲国产精品久久久久久 | 青青草久久 | 亚洲一区二区日韩 | 久久99视频这里只有精品 | 亚洲精品一区二区在线 | 91视频免费网站 | 一级黄色片视频 | 国产精品网站在线观看 | 黑人一级片视频 | a级片在线观看 | 国产乱淫av片 | 日本黄色免费大片 | 一区二区久久 | 欧美a在线 | 黄a免费看 | 超级碰在线 | 久久综合久久久 | caoporn视频 | 在线看国产 | 天堂动漫 | 色婷婷av一区二区三区大白胸 | 午夜精品一区二区三区免费视频 | 九九热这里只有 | 色悠久久久 | 欧美猛交ⅹxxx乱大交视频 | 亚洲精品美女在线观看 | 天天综合91| 欧美成人精品一区二区三区 | 国产精品电影 | 99色综合 | 日韩喷潮| 国产成人一区 | 国产91在线视频 | 国产精品一区二区三区在线 | 蜜桃av一区二区三区 | 中文字幕八区 | 黄色地址| 国产成人免费视频网站高清观看视频 | 成人午夜免费视频 | 欧美日韩亚洲一区 | 毛片国产 | 亚洲一二视频 | 黑色丝袜脚足j国产在线看68 | 一区二区av在线 | 久久精品国产99精品国产亚洲性色 | 成人国产一区 | 色欧美日韩 | 久久大 | 日韩三级视频 | 91免费版在线观看 | 国产情侣免费视频 | 国产三级电影 | 一级黄色生活视频 | 成人二区 | 国产精品久久久久aaaa九色 | 亚洲综合区 | 日韩成人在线一区 | 久久视频精品 | 久久亚洲美女 | 久久久久久久久久影院 | 国产不卡一区 | 欧美高潮 | 91性高湖久久久久久久久_久久99 | 北条麻妃一区二区三区在线观看 | 狠狠操夜夜操 | 一区三区在线观看 | 亚洲精品在线免费 | 国产午夜视频 | 成人亚洲欧美 | 日韩欧美国产成人一区二区 | 欧洲视频一区二区三区 | 国产精品二区三区在线观看 | 久久久久亚洲精品 | 久草视频在线看 | 日韩福利片 | 久久伊人草 | 久久国产精品视频 | 一区二区三区国产视频 | 日韩中文字幕av | 欧美中文日韩 | 欧美啪啪一区二区 | 97成人在线 | 国产视频第一区 | 亚洲综合久久网 | 欧美日本三级 | 成人免费视频网站 | 国产在线视频一区 | 精品国产乱码久久久久夜 | a视频在线观看 | 免费在线a | 欧美一区二区三区视频 | 亚洲成人精品区 | 日韩一区二区三区在线观看 | 亚洲免费片 | 国产精品爱久久久久久久 | 午夜免费| 亚洲精品视频免费 | 99精品一区二区 | 午夜精品久久久久久久久久久久久 | 欧美xxxx色视频在线观看免费 | 欧美大片网站 | 在线视频一区二区 | 欧美黄色一级毛片 | 亚洲精品一区二三区不卡 | 久久久久高清 | 久久伊人中文字幕 | 欧美精品 在线观看 | 亚洲在线视频 | 二区视频 | 亚洲欧美另类久久久精品2019 | 欧美日韩精品一区二区三区 | 日韩乱码中文字幕 | 免费国产wwwwwww网站 | 亚洲免费视频网站 | 日本天天操 | 欧美精品一区二区三区在线播放 | 国产精品久久久久久久久久久新郎 | 都市激情av | 四虎884a | 中文字幕av一区二区三区免费看 | 一区视频在线 | 中文字幕视频在线播放 | 国产高清在线不卡 | 亚洲国产高清视频 | 影音先锋男人网 | 一 级 黄 色 片免费网站 | 九九热在线免费视频 | 欧美视频在线免费 | 久色| 国产在线一二 | 大陆毛片| 日本黄色大片 | 在线视频亚洲 | 久久51 | 国产高清视频一区二区 | 天堂在线网 | 中文字幕一区二区三区乱码图片 | 久久久精品一区 | av中文字幕网 | 日韩午夜电影在线观看 | 午夜寂寞影视在线观看 | 伊人网站| 久久精品美女 | 毛片免费观看视频 | 男人的天堂久久 | 日本激情视频在线播放 | 色女人av | 日日网 | 99爱在线观看 | 成人不卡 | 一级大片免费观看 | 欧美二区视频 | 成人午夜视频在线观看 | 成人亚洲视频在线观看 | 欧美在线激情 | 九九在线视频 | 在线欧美日韩 | 黄色毛片免费看 | 欧美日韩视频在线第一区 | 九九免费视频 | 免费观看在线午夜影视 | 亚洲一区 中文字幕 | 在线视频 中文字幕 | 亚洲国产字幕 | 亚洲二区在线观看 | 电影k8一区二区三区久久 | 日本全黄裸体片 | 五月天婷婷国产精品 | 九色精品 | 日韩精品小视频 | 日韩视频精品在线 | 夫妻午夜影院 | 久久国产美女 | 国产亚洲精品精品国产亚洲综合 | 亚洲免费在线视频 | 日韩高清一区二区 | 欧美亚洲一区 | 天天操狠狠操 | 日韩欧美一区二区三区四区 | 精品99久久久久久 | 国产精品国产精品国产专区不卡 | 一区免费看 | 小情侣高清国产在线播放 | 免费观看一区二区三区毛片 | www.黄网 | 日韩在线中文 | 一区二区三区免费av | 久久69精品久久久久久久电影好 | 中文字幕 在线观看 | 噜噜噜在线观看免费视频日本 | 日韩av一区二区三区在线观看 | av国产精品 | 国产精品人人做人人爽人人添 | 国产精品一区二区三区四区 | 亚洲国产精品成人无久久精品 | 日韩毛片免费看 | 国产精品精品 | 久久久av | 成人免费在线网址 | www国产亚洲| 久久精品日韩 | 精品欧美乱码久久久久久 | 日本久久久久久 | 欧美午夜一区 | 日韩大片免费播放 | 日韩在线中文字幕视频 | 五月婷婷丁香在线 | 亚洲欧美中文字幕 | 久久伊人精品视频 | 欧美一区二区三区免费电影 | 99久久视频 | 国产免费一区二区 | www.狠狠干 | 久久人人爽人人爽人人片av不 | 日韩一区二区在线观看视频 | 欧美激情视频一区二区三区在线播放 | 欧美一级久久久 | 精品国产一区一区二区三亚瑟 | a级毛片黄| 国产精品亚洲天堂 | 色爱区综合 | 99这里只有精品 | 超碰免费在线观看 | www中文字幕 | 一区二区三区国产在线 | 天天舔天天干 | 久久久久久国产精品美女 | 动漫羞免费网站中文字幕 | 国产精品亲子伦av一区二区三区 | 精品视频网 | 毛片毛片毛片 | 国产成人精品在线 | 日本一二三视频 | 韩国av片在线观看 | 成人免费毛片aaaaaa片 | 国产精品视频一区二区三区 | 亚洲国产精品久久人人爱 | 精国产品一区二区三区四季综 | www.色在线 | 欧美日韩国产精品久久久久 | 欧美一级欧美三级在线观看 | 国产午夜精品久久久久久久 | 日韩中文字幕免费视频 | 欧美精品一区二区三区在线四季 | 日韩专区在线 | 亚洲国产91 | 国产精品久久国产精麻豆99网站 | 毛片av片| 亚洲性视屏 | 精品欧美一区二区三区久久久 | 激情婷婷 | 99精品欧美一区二区三区 | 国产成人在线播放 | 91视频免费播放 | 欧美中文| 日韩欧美视频 | 国产精品一区二区av | 精品成人久久 | 日日夜夜天天干干 | av超碰| 国产成人精品免高潮在线观看 | 成人免费一区二区三区 | 999免费视频| 亚洲国产免费 | 成人性大片免费观看网站 | 中文字幕三区 | 日韩精品观看 | 亚洲国产高清高潮精品美女 | 亚洲国产精品一区二区第一页 | av大片在线观看 | 国产精产国品一二三产区视频 | 日本特黄特色aaa大片免费 | 色综合国产 | 涩涩视频在线免费看 | 亚洲成人久久久 | 国产成人精品久久二区二区 | 一级一片免费视频 | 欧美一区二区三区精品 | 中文精品在线 | 99国产精品99久久久久久 | 国产在线观看免费av | 久久成人精品 | 日日摸夜夜添夜夜添高潮视频 | 久久久精品免费观看 | 中文字幕日韩在线 | 日韩亚洲 | 日韩成人在线一区 | www.福利视频 | 一区二区三区无码高清视频 | 欧美日韩在线一区二区 | 亚洲精品一二区 | 多p视频| 三区在线 | 一区二区三区国产 | 视频一区二区三区在线观看 | 北条麻妃99精品青青久久主播 | 午夜噜噜噜| 国产片一区二区三区 | 欧美黄 片免费观看 | 欧洲成人在线视频 | 99成人| 欧美日韩久久久 | 国产精品久久久久久二区 | 日本免费不卡 | 日韩欧美国产网站 | 日韩欧美在线播放视频 | 欧美精品在线一区 | 三区中文字幕 | 免费三片在线观看网站 | 日韩av成人 | 欧美成人免费网站 | 国产精品久久久久久久久久小说 | 亚洲精品9999 | 国产成人精品免高潮在线观看 | 久久天天躁狠狠躁夜夜躁2014 | 久久久久久91亚洲精品中文字幕 | 亚洲高清在线视频 | 亚洲在线一区二区 | 最新国产视频 | 国产亚洲精品久久久久久豆腐 | 日韩免费 | 在线观看免费av电影 | 久久久性色精品国产免费观看 | 在线三级电影 | 国产一区在线免费观看 | 国产视频一区二区 | 国产精品第一国产精品 | 国产精品亚洲精品 | 99精品电影 | 亚洲福利影院 | 亚洲一区二区三区四区五区中文 | 中文字幕亚洲一区二区三区 | 亚洲视频一区二区三区 | 日韩精品一区二区三区第95 | 日韩性视频 | 久草视频在线首页 | 亚洲综合大片69999 |