springboot实现登录操作
本文主要用到的技术有mybatis-plus以及json数据的封装,以及thymleaf模板引擎的使用。
thymleaf模板引擎配置的时候,controller层的注解只能用@Controller,不能用@RestController,因为thymleaf解析成的是视图不能解析成json格式,本案例用的是创建thymleaf的一种常见的方式,传入一个model,返回的就是静态资源的名称。
案例的资源,详见资源区,谢谢您的支持。
1.登录案例
1.案例参考代码
第一步:创建一个springboot的项目
-
导入mybatis-plus依赖 -
导入web项目起步依赖 -
导入mysql起步依赖 -
导入thymleaf模板引擎依赖 -
导入FastJson依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.72</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
?
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.12</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
第二步:编写配置文件和pom
pom文件的配置:打包文件用
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/**</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
配置文件的配置:
-
数据库的配置 -
thymleaf配置 -
mybatis-plus配置
server:
port: 8080
servlet:
context-path: /user
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/vue?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT
username: root
password: root
# 属性参考:https://www.cnblogs.com/gqymy/p/9216686.html
thymeleaf:
cache: false
encoding: UTF-8
mode: HTML5
enabled: true
prefix: classpath:/templates/
suffix: .html
#配置路径
mybatis-plus:
mapper-locations: classpath:mappers/*.xml
第三步:编写实体类User
public class User implements Serializable {
private String id;
private String name;
private String password;
?
public String getId() {
return id;
}
?
public void setId(String id) {
this.id = id;
}
?
public String getName() {
return name;
}
?
public void setName(String name) {
this.name = name;
}
?
public String getPassword() {
return password;
}
?
public void setPassword(String password) {
this.password = password;
}
?
public User(String id, String name, String password) {
this.id = id;
this.name = name;
this.password = password;
}
?
public User() {
}
}
第四步:编写返回统一json数据格式的Result工具类
public class Result<T>{
//返回提示信息
private String msg;
//是不是正常的请求
private boolean success;
//具体返回的数据
private T data;
?
public String getMsg() {
return msg;
}
?
public void setMsg(String msg) {
this.msg = msg;
}
?
public boolean isSuccess() {
return success;
}
?
public void setSuccess(boolean success) {
this.success = success;
}
?
public T getData() {
return data;
}
?
public void setData(T data) {
this.data = data;
}
?
public Result(String msg, boolean success, T data) {
this.msg = msg;
this.success = success;
this.data = data;
}
?
public Result() {
}
}
第五步:编写Dao层
UserDao:
insertUser和findUserById用于注册
findUserByPassword用于登录验证
@Mapper
public interface UserDao extends BaseMapper<User> {
// 根据id查询用户(判断用户注册了吗?)
public User findUserById(String id);
// 添加一个新的用户
public int insertUser(User user);
// 用于登录,根据id和密码验证
public User findUserByPassword(User user);
}
UserDao.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--指定dao文件所在的位置-->
<mapper namespace="com.example.login.mapper.UserDao">
<!--定义sql语句-->
<!--
id指定的是dao层指定的方法的名称
resultType=""指定返回的类型,比如User实体指定的类
#{id}是dao层传入的参数
-->
<!-- 根据id查询用户-->
<select id="findUserById" resultType="com.example.login.pojo.User" parameterType="String">
select id, name, password
from user
where id = #{id}
</select>
<!--插入数据-->
<insert id="insertUser" parameterType="com.example.login.pojo.User">
insert into user values(#{id},#{name},#{password})
</insert>
<!-- 根据密码查询-->
<select id="findUserByPassword" parameterType="com.example.login.pojo.User" resultType="com.example.login.pojo.User">
select id, name, password
from user
where password = #{password} and id=#{id}
</select>
</mapper>
?
第六步:创建service文件
UserService:
public interface UserService {
public Result register(User user) ;
?
public Result login(User user) ;
}
UserServiceImpl:
@Service
public class UserServiceImpl implements UserService{
?
@Resource
private UserDao userMapper;
?
// 注册
@Transactional
@Override
public Result register(User user) {
Result result = new Result();
// 默认是空和false
result.setSuccess(false);
result.setData(null);
try {
User existUser = userMapper.findUserById(user.getId());
if(existUser != null){
//如果用户已存在
result.setMsg("用户名已存在");
?
}else{
userMapper.insertUser(user);
//System.out.println(user.getId());
result.setMsg("注册成功");
result.setSuccess(true);
result.setData(user);
}
} catch (Exception e) {
result.setMsg(e.getMessage());
e.printStackTrace();
}
?
return result;
}
/**
* 登录
*/
@Override
public Result login(User user) {
Result result = new Result();
result.setSuccess(false);
result.setData("null");
try {
// 用户名和密码不是空才能验证登录
System.out.println(user.getId()+user.getName()+user.getPassword());
if (user.getId()!=null&&user.getPassword()!=null){
// 根据id和密码进行查询
User p_user=userMapper.findUserByPassword(user);
if (p_user!=null){
result.setSuccess(true);
result.setMsg("登录成功");
result.setData(p_user);
?
}
// 检测不通过
else
{
result.setMsg("账号或密码错误!");
?
}
}
// 登录失败
else
{
result.setMsg("用户名或密码错误");
}
// 捕获异常
} catch (Exception e) {
result.setMsg(e.getMessage());
e.printStackTrace();
}
return result;
}
第七步:创建controller
@Controller
public class UserController {
?
@Resource
private UserService userService;
//注册
@PostMapping(value = "/register")
@ResponseBody
public String regist(User user){
return JSON.toJSONString(userService.register(user));
}
?
// 登录
@PostMapping(value = "/login")
@ResponseBody
public String login(User user){
return JSON.toJSONString(userService.login(user));
}
?
//返回登录的首页
@GetMapping(value = "/index")
public String Index(Model model){
return "index";
}
//返回注册的首页
@GetMapping(value = "/register")
public String Login(Model model){
return "register";
}
?
}
第八步:配置mybatis-plus的JavaConfig
//配置mybatis-plus
@Configuration
public class MybatisConfig {
@Bean
public MybatisPlusInterceptor MPI(){
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return mybatisPlusInterceptor;
}
?
}
第九步:编写thymleaf模板
index.html
<!DOCTYPE html>
<!--导入thymeleaf的名称空间-->
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>用户登录</title>
</head>
<body>
<form action="/user/login" method="post">
账号:<input name="id" type="text"/><br>
密码:<input name="password" type="password"> <br>
<input type="submit" value="登录">
</form>
</body>
registerUser.html
<!DOCTYPE html>
<!--导入thymeleaf的名称空间-->
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>用户注册</title>
</head>
<body>
<form action="/user/register" method="post">
账号:<input name="id" type="text"/><br>
密码:<input name="password" type="password"> <br>
<input type="submit" value="注册">
</form>
</body>
第十步:接口测试
注册接口:


登录接口:


模板首页:

模板注册页面:

第十一步:界面演示

|