SpringBoot:实现用户根据角色登录不同的页面 您所在的位置:网站首页 考生登录界面怎么打开 SpringBoot:实现用户根据角色登录不同的页面

SpringBoot:实现用户根据角色登录不同的页面

2023-11-11 11:18| 来源: 网络整理| 查看: 265

本文记录用SpringBoot 实现简单的用户登录过程,对于初步入门的我来说遇到了很多的困难,所以在实现登录后特写此篇文章。描述我在实现过程中遇到的问题和疑惑,也算是自己的学习笔记吧!!

开发环境: IDE:JetBrains Intelij IDEAJava:JavaSE13SpringBoot + xadmin + Layui +Mybatis + MySQL 详细过程: 文件目录:

实现用户登录功能用到的目录已经标出: 在这里插入图片描述

【domain】目录主要用于实体(Entity)与数据访问层(Repository)控制【service 】层主要是业务类代码【controller 】负责页面访问控制【dao】数据库访问层【entity】实体层(这里没有) 设置和连接数据库: 建立数据库

在Navicat中建立一个数据库,并建立一张用户表(用来存储要登录的用户)

用户登录主要用到下面这张user表,这里事先输入了用户名和密码。 在这里插入图片描述

设置application.properties文件

然后,打开SpringBoot项目的application.properties文件,配置如下信息:

# 数据库的连接驱动 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # 连接数据库的地址,注意端口和要连接的数据库名,后面设置时区,不然可能会报错 spring.datasource.url=jdbc:mysql://localhost:3306/database-manager?serverTimezone=UTC # 连接的账号和密码,根据自己情况 spring.datasource.username=root spring.datasource.password=123456 # 下面关于mybatis的要设置,不然会报错,读取不了数据库数据。 # mapper xml文件路径 mybatis.mapper-locations=classpath:mapper/*.xml # 实体类别名 mybatis.type-aliases-package=pinksmile.database.domin # 开启驼峰命名 mybatis.configuration.map-underscore-to-camel-case=true # 将日志输出到控制台 mybatis.configuration.logImpl=org.apache.ibatis.logging.stdout.StdOutImpl # 这个开发配置为false,避免改了模板还要重启服务器 spring.thymeleaf.cache=false

然后,用IDEA连接数据库: 在这里插入图片描述

使用Mybatis操作数据库

配置数据库数据操作UserMapper.xml文件:注意与dao层和domain层关联。 需要注意的地方下面已经标出(网上有文章介绍):

select * from user where username = #{username} and password = #{password} select role from user where id = #{userId}

至此,关于数据库的部分已经配置完成。下面写代码部分。

准备页面:

templates目录下:

login.html 登录页面index.html 登录后普通用户跳转的页面manage.html 登录后管理员跳转的页面 各层文件及作用 首先是【domain】中的User.java,用作数据库表的映射,描述数据库中表的信息:

该文件要注意的是下载 lombok 依赖,使用IDEA的拓展插件即可完成,方法可参考网上。

package pinksmile.database.domain; import lombok.Data; /** * 登录的用户表 * @author PinkSmile */ @Data public class User { /** * 数据库用户标的字段 * 保证字段和数据类型一致 */ private Integer id; private String nickname; private String username; private String password; private String permission; private String role; } 【dao】层数据库接口:

该层的函数接口和前面配置UserMapper.xml文件有关,此文件是提供接口,而那个配置文件是实现该接口的功能。

package pinksmile.database.dao; import org.springframework.stereotype.Repository; import pinksmile.database.domain.User; @Repository // 这是mybatis操作的数据库 public interface UserDao { // 根据用户名和密码获得用户信息 User login(String username, String password); // 根据用户 id 获取用户角色 String getUserRoleByID(Integer userId); } 【service】业务逻辑编写

在初始化数据库环境,定义数据库访问接口后,下面就是业务逻辑的编写。

package pinksmile.database.service; import org.springframework.data.relational.core.sql.In; import pinksmile.database.dao.UserDao; import pinksmile.database.domain.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class UserService { @Autowired private UserDao userDao; // 根据用户名和密码登录 public User login(String username, String password) { return userDao.login(username, password); } // 通过用户ID得到用户角色 public String getUserRoleByID(Integer userId) {return userDao.getUserRoleByID(userId);} } 【controller】负责页面访问控制

该层是最麻烦的一层,负责页面的跳转和页面的各种活动。

首先是登录页面控制

注意:区分网址和网站页面的使用,一开始我都没搞清楚。每一个页面都对应一个网址。 业务逻辑:

输入网址http://localhost:8080/login进入的是登录页面,也就是我们写的login.html前端页面。如果已经登录,就重定向跳转到管理界面http://localhost:8080/manage,根据不同的用户角色跳转到不同界面如果没有登录,就返回登录页面。在登录是否成功时,失败页面的网址为http://localhost:8080/manage/verification,但显示的页面仍然是登录页面。如果登录判断成功,就跳转到管理页面。 BackManage.java

实现功能:

管理页面和网址的映射,对登录后的页面进行跳转 package pinksmile.database.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import pinksmile.database.domain.User; import pinksmile.database.service.UserService; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; @Controller public class BackManage { @Autowired UserService userService; /** * 后台管理页面数据准备接口 * @param request 用于获取Session来判断是否登录 * @return 返回模板页面 */ @GetMapping("/manage") // 管理页面网址 public String manage(HttpServletRequest request){ HttpSession session=request.getSession(); // 获取登录信息 Object obj = session.getAttribute("user"); // 没有登录,返回登录页面 if(obj == null){ // 登录信息为 null,表示没有登录 return "redirect:/login"; } User loginUser = (User) obj; // 强制转换成 User Integer userId = loginUser.getId(); // 获得登录用户的 id String role = userService.getUserRoleByID(userId); // 通过登录用户的 id 得到用户的角色 // 如果是用户登录,返回用户界面 if (role.equals("user")){ return "index"; } // 如果是管理员登录就返回管理页面 return "manage"; } @GetMapping("/welcome") public String toWelcome() {return "welcome";} } Login.java:

实现功能:

从数据库获取密码进行登录每到达登录页面就判断是否短时间内已经登陆过,登陆过就直接跳转到页面 package pinksmile.database.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import pinksmile.database.domain.User; import pinksmile.database.service.UserService; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; @Controller public class Login { @Autowired UserService userService; /** * 用于返回登录页面 * @param request 判断是否已经登录,已经登录就直接跳转 * @return 返回登录页面模板 */ @GetMapping("/login") // 登录页面网址 public String login(HttpServletRequest request) { HttpSession session = request.getSession(); // 获取用户登录信息 // 如果已经登录,则重定向直接跳转到判断界面 if (session.getAttribute("user") != null) { return "redirect:/manage"; } // 如果没有登录信息,则直接返回登录页面 return "login"; } /** * 用于验证账号和密码是否正确 * * @param username 账号信息 * @param password 密码信息 * @param request 用于获取Session * @return 登录成功跳转管理界面,失败返回错误信息到登录页面 */ @PostMapping("/manage/verification") // 失败错误信息页面网址 public String verification(@RequestParam("username") String username, @RequestParam("password") String password, HttpServletRequest request) { if (username.equals("") || password.equals("")) { // 密码为空,重新登录 return "login"; } else { User user = userService.login(username, password); // 从数据库中获得与输入相同的用户 if (user == null) { // 没有该用户 return "login"; } // 创建 session HttpSession session = request.getSession(); session.setAttribute("user", user); } return "redirect:/manage"; // 登录成功进行页面选择跳转 } } 运行结果:

普通用户登录到后台管理页面: 在这里插入图片描述 已经登录后,再登录直接重定向到管理页面: 在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有