spring boot + vue 前后分离实现登录功能(三)
Spring boot 后台
github 地址 SpringBoot-book-vue-demo
使用tk.mytabis 简化mybatis 开发
使用 durid 连接池 连接Mysql
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.lick</groupId>
<artifactId>vue_demo</artifactId>
<version>1.0.0-SNAPSHOT</version>
<name>vue_demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<mysql.version>8.0.15</mysql.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- Druid 数据库连接 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.5</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.5</version>
<configuration>
<configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
<overwrite>true</overwrite>
<verbose>true</verbose>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>3.4.4</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
实体类 TbUser.java
package com.lick.vue_demo.domain;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
@Table(name = "tb_user")
public class TbUser {
/**
* 用户ID
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
/**
* 登录名
*/
@NotNull(message = "用户名不能为空")
private String username;
/**
* 登录密码
*/
@NotNull(message = "密码不能为空")
private String password;
/**
* 手机号
*/
private String phone;
/**
* 获取用户ID
*
* @return id - 用户ID
*/
public Integer getId() {
return id;
}
/**
* 设置用户ID
*
* @param id 用户ID
*/
public void setId(Integer id) {
this.id = id;
}
/**
* 获取登录名
*
* @return username - 登录名
*/
public String getUsername() {
return username;
}
/**
* 设置登录名
*
* @param username 登录名
*/
public void setUsername(String username) {
this.username = username;
}
/**
* 获取登录密码
*
* @return password - 登录密码
*/
public String getPassword() {
return password;
}
/**
* 设置登录密码
*
* @param password 登录密码
*/
public void setPassword(String password) {
this.password = password;
}
/**
* 获取手机号
*
* @return phone - 手机号
*/
public String getPhone() {
return phone;
}
/**
* 设置手机号
*
* @param phone 手机号
*/
public void setPhone(String phone) {
this.phone = phone;
}
}
登录控制层 LoginController.java
package com.lick.vue_demo.controller;
import com.lick.vue_demo.domain.TbUser;
import com.lick.vue_demo.mapper.TbUserMapper;
import com.lick.vue_demo.result.AjaxResult;
import com.lick.vue_demo.result.ResultFactory;
import com.lick.vue_demo.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import tk.mybatis.mapper.entity.Example;
import javax.validation.Valid;
@RestController
@CrossOrigin
public class LoginController {
@Autowired
private TbUserMapper tbUserMapper;
@RequestMapping(value = "/api/login", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
public AjaxResult login(@Valid @RequestBody TbUser tbUser, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
String message = String.format("登陆失败,详细信息[%s]。", bindingResult.getFieldError().getDefaultMessage());
return ResultFactory.buildFailResult(message);
}
Example example = new Example(TbUser.class);
example.createCriteria().andEqualTo("username",tbUser.getUsername());
TbUser tbUser1 = tbUserMapper.selectOneByExample(example);
if(StringUtils.isNotNull(tbUser1)) {
if ( !tbUser.getPassword().equals(tbUser1.getPassword())) {
String message = String.format("登陆失败,详细信息[密码不正确]。");
return ResultFactory.buildFailResult(message);
}else {
return ResultFactory.buildSuccessResult(tbUser1);
}
}else {
String message = String.format("登陆失败,详细信息[用户名不正确]。");
return ResultFactory.buildFailResult(message);
}
}
}
返回值实体类 Result.java
package com.lick.vue_demo.result;
/**
* 通用返回值实例
*/
public class AjaxResult {
/**
* 响应状态码
*/
private int code;
/**
* 响应状态消息
*/
private String msg;
/**
* 响应结果对象
*/
private Object object;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Object getObject() {
return object;
}
public void setObject(Object object) {
this.object = object;
}
AjaxResult (int code,String msg,Object data) {
this.code = code;
this.msg = msg;
this.object = data;
}
}
代码编号 ResultCode.java
package com.lick.vue_demo.result;
public enum ResultCode {
/**
* 成功
*/
SUCCESS(200),
/**
* 失败
*/
FAIL(400),
/**
* 未认证(签名错误)
*/
UNAUTHORIZED(401),
/**
* 接口不存在
*/
NOT_FOUND(404),
/**
* 服务器内部错误
*/
INTERNAL_SERVER_ERROR(500);
public int code;
ResultCode(int code) {
this.code = code;
}
}
响应结果生产工厂 ResultFactory.java
package com.lick.vue_demo.result;
/**
* @description 响应结果生成工厂类
*/
public class ResultFactory {
public static AjaxResult buildSuccessResult(Object data) {
return buildResult(ResultCode.SUCCESS, "成功", data);
}
public static AjaxResult buildFailResult(String message) {
return buildResult(ResultCode.FAIL, message, null);
}
public static AjaxResult buildResult(ResultCode resultCode, String message, Object data) {
return buildResult(resultCode.code, message, data);
}
public static AjaxResult buildResult(int resultCode, String message, Object data) {
return new AjaxResult(resultCode, message, data);
}
}
spring boot + vue 前后分离实现登录功能(三)的更多相关文章
- spring boot + vue 前后分离实现登录功能(二)
安装 axios 进行路由转发 npm install axios --save-dev 或者 cnpm install axios --save-dev 修改 Main.js 新增 var axio ...
- spring boot + vue 前后分离实现登录功能(一)
使用webpack 打包初始化项目 vue init webpack book-vue 进入工程目录 cd hello-vue 安装 vue-router npm install vue-router ...
- Spring Boot +Vue 项目实战笔记(三):数据库的引入
这一篇的主要内容是引入数据库并实现通过数据库验证用户名与密码. 一.引入数据库 之前说过数据库的采用是 MySQL,算是比较主流的选择,从性能和体量等方面都比较优秀,当然也有一些弊端,但数据库不是我们 ...
- 喜大普奔,两个开源的 Spring Boot + Vue 前后端分离项目可以在线体验了
折腾了一周的域名备案昨天终于搞定了. 松哥第一时间想到赶紧把微人事和 V 部落部署上去,我知道很多小伙伴已经等不及了. 1. 也曾经上过线 其实这两个项目当时刚做好的时候,我就把它们部署到服务器上了, ...
- 两个开源的 Spring Boot + Vue 前后端分离项目
折腾了一周的域名备案昨天终于搞定了. 松哥第一时间想到赶紧把微人事和 V 部落部署上去,我知道很多小伙伴已经等不及了. 1. 也曾经上过线 其实这两个项目当时刚做好的时候,我就把它们部署到服务器上了, ...
- 一个实际的案例介绍Spring Boot + Vue 前后端分离
介绍 最近在工作中做个新项目,后端选用Spring Boot,前端选用Vue技术.众所周知现在开发都是前后端分离,本文就将介绍一种前后端分离方式. 常规的开发方式 采用Spring Boot 开发项目 ...
- 前后端分离,我怎么就选择了 Spring Boot + Vue 技术栈?
前两天又有小伙伴私信松哥,问题还是职业规划,Java 技术栈路线这种,实际上对于这一类问题我经常不太敢回答,每个人的情况都不太一样,而小伙伴也很少详细介绍自己的情况,大都是一两句话就把问题抛出来了,啥 ...
- spring boot+vue实现H5聊天室客服功能
spring boot+vue实现H5聊天室客服功能 h5效果图 vue效果图 功能实现 spring boot + webSocket 实现 官方地址 https://docs.spring.io/ ...
- Spring Boot + Vue 跨域请求问题
使用Spring Boot + Vue 做前后端分离项目搭建,实现登录时,出现跨域请求 Access to XMLHttpRequest at 'http://localhost/open/login ...
随机推荐
- UCOSII软件定时器
API函数 //创建 OS_TMR *OSTmrCreate (INT32U dly, INT32U period, INT8U opt, OS_TMR_CALLBACK callback, void ...
- 大学课后答案微信小程序项目实践(1)
叨逼叨 还记得以前小编上大学那会苦于课后习题没有答案...到了考试....就像下面这个图一样- 现在,那些同样在纠结于书本后的答案太遥远的同学们,要告诉你们一个好消息,个人历时两周作业的时间开发的小程 ...
- Linux记录history命令
对后面的(1)方法的提取文件改写法(强烈推荐) 记录存储位置: mkdir -p /usr/local/records chmod 777 /usr/local/records/chmod +t /u ...
- pod健康检查(liveness probe存活探针&&readiness probe 可读性探针)
在Kubernetes集群当中,我们可以通过配置liveness probe(存活探针)和readiness probe(可读性探针)来影响容器的生存周期.参考文档:https://kubernete ...
- kubernetes-安装Helm
Helm是什么? Helm可以管理Kubernetes应用程序-Helm Charts帮助您定义,安装和升级最复杂的Kubernetes应用程序. 下载Helm 在https://github.com ...
- python的time模块和datetime模块
1. 将当前时间转成字符串 strftime 方法,并输出 import datetime # 获取当前时间 datetime.datetime.now() print(datetime.dateti ...
- ISCC之web1
由题意知,爆破可行. 简单说一下抓包过程,第一个抓到的POST包直接放掉,右键扫描站点,扫出来第二个POST包,第二个POST包cookie,验证码,密码均为空,于是我开始尝试去利用, 经过几次rep ...
- 性能优化处理CPU快慢问题
经常听到有人说磁盘很慢.网络很卡,这都是站在人类的感知维度去表述的,比如拷贝一个文件到硬盘需要几分钟到几十分钟,够我去吃个饭啦:而从网络下载一部电影,有时候需要几个小时,我都可以睡一觉了. 最为我们熟 ...
- CTSC2010 珠宝商
珠宝商 题目描述 Louis.PS 是一名精明的珠宝商,他出售的项链构造独特,很大程度上是因为他的制作方法与众不同.每次 Louis.PS 到达某个国家后,他会选择一条路径去遍历该国的城市.在到达一个 ...
- MyEclipse激活代码
package TestCase; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStr ...