六,业务功能:登录

news2024/9/21 14:42:25

六,业务功能:登录

文章目录

  • 六,业务功能:登录
  • 编写 AuthController 作为登录控制器
  • 编写 EmpService 业务处理
  • 编写 target.html 登录成功页面显示
  • 启动 Tomcat 服务器,运行测试


编写 AuthController 作为登录控制器

demo-module02-component 模块下,的 src/main/java/目录下创建一个名为:

com.rainbowsea.imperial.court.controller 的包,下创建一个名为 AuthController 的类(注意:类上要添加上 @Controller 注解),作为登录控制器处理

在这里插入图片描述

package com.rainbowsea.imperial.court.controller;


import com.rainbowsea.imperial.court.entity.User;
import com.rainbowsea.imperial.court.service.api.UserService;
import com.rainbowsea.imperial.court.utils.ImperialCourtConst;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpSession;

@Controller //
public class AuthController {


    @Autowired
    private UserService userService;

    @RequestMapping("/auth/login")
    public String doLogin(
            @RequestParam("loginAccount") String loginAccount,
            @RequestParam("loginPassword") String loginPassword,
            HttpSession session,
            Model model
    ) {

        // 1、尝试查询登录信息
        User user = userService.getUserByLogin(loginAccount, loginAccount);

        // 2、判断登录是否成功
        if (user == null) {
            // 登录失败,密码错误
            model.addAttribute("message", ImperialCourtConst.LOGIN_FAILED_MESSAGE);

            // 返回首页重新登录
            // 3、如果登录失败则回到登录页面显示提示消息
            return "index";

        } else {

            // 4、如果登录成功则将登录信息存入 Session 域
            session.setAttribute("loginInfo", user);

            return "target";
        }

    }
}

在 demo-module01-web 模块下的 resources 根路径下的 spring mvc.xml 文件中添加上,对于 com.rainbowsea.imperial.court.controller 包下的控制器的组件扫描。

在这里插入图片描述

编写 EmpService 业务处理

在 demo-module02-component 模块下的,src\main\java 目录下创建一个:com.rainbowsea.imperial.court.service.api包,在该包下创建一个名为 :UserService 的接口。

在这里插入图片描述

package com.rainbowsea.imperial.court.service.api;

import com.rainbowsea.imperial.court.entity.User;

public interface UserService {
    User getUserByLogin(String loginAccount, String loginAccount1);

}

在 demo-module02-component 模块下的,src\main\java 目录下创建一个:com.rainbowsea.imperial.court.service.impl包,在该包下创建一个名为 :UserServiceImpl 类并实现 UserService 的接口中的 getUserByLogin( ) 方法。

在这里插入图片描述

package com.rainbowsea.imperial.court.service.impl;

import com.rainbowsea.imperial.court.entity.User;
import com.rainbowsea.imperial.court.entity.UserExample;
import com.rainbowsea.imperial.court.mapper.UserMapper;
import com.rainbowsea.imperial.court.service.api.UserService;
import com.rainbowsea.imperial.court.utils.MD5Util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;


@Service
@Transactional(readOnly = true)  // 事务管理
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public User getUserByLogin(String loginAccount, String loginPassword) {

        // 1、密码加密
        String encodeLoginPassword = MD5Util.encode(loginPassword);

        // 2、通过 QBC 查询方式封装查询条件
        UserExample example = new UserExample();

        UserExample.Criteria criteria = example.createCriteria();
        criteria.andNameEqualTo(loginAccount).andPasswordEqualTo(loginPassword);

        List<User> users = userMapper.selectByExample(example);
        if (users != null && users.size() > 0) {

            // 3、返回查询结果
            return users.get(0);
        }

        return null;
    }
}

在这里插入图片描述

或者是在 spring-persist.xml 中添加组件扫描也可以。

注意:无论是 sping mvc.xml 还是 spring-persist.xml 两者的哪一个都可以,但是其中的一个一定要添加上 对于 service 业务上的类,的组件扫描。

编写 target.html 登录成功页面显示

在 demo-module01-web 模块下的 webapp\WEB-INF\templates 目录下,创建一个名为 target.html 的前端页面。

在这里插入图片描述

<!DOCTYPE html>
<html lang="en" xml:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>登录成功</title>
</head>
<body>

<p th:text="${session.loginInfo}"></p>

</body>
</html>

启动 Tomcat 服务器,运行测试

测试:输入正确的密码,能否登录成功

在这里插入图片描述

测试:输入错误的密码,能否成功

在这里插入图片描述

  • 对应顺序上一节内容:✏️✏️✏️ 五,搭建环境:辅助功能-CSDN博客

  • 对应顺序是下一节内容:✏️✏️✏️

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1994485.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【区块链+社会公益】人民链数字福虎 | FISCO BCOS应用案例

人民链在 2022 年春节期间发起保护生物多样性的公益活动——“数字福虎迎新春”&#xff0c;通过区块链技术&#xff0c;探索迎新 春 新公益&#xff0c;助力保护“生物多样性”。 由人民在线开发的人民链客户端定位为“口袋里的大数据管 家”&#xff0c;通过“超级 ID”数字…

redis面试(九)锁重入和互斥

可重入 1&#xff09;如果一开始这个锁是没有的&#xff0c;第一次来加锁&#xff0c;这段lua脚本会如何执行&#xff1f; "if (redis.call(‘exists’, KEYS[1]) 0) then " "redis.call(‘hset’, KEYS[1], ARGV[2], 1); " "redis.call(‘pexpi…

【按键精灵安卓版小精灵进程守护-崩溃自启中(原理篇·下)】安卓版按键小精灵崩溃自启插件兼容不同系统在游戏场景和非游戏场景下的自启,源码分享。

按键精灵安卓版小精灵进程守护-崩溃自启中&#xff08;原理篇下&#xff09; 前言一、了解几个重要的Android命令1.getevent——事件查看捕获2.sendevent——底层事件模拟 二、逻辑解析1.获取设备名称2.获取tap事件序列3.获取映射关系4.自定义底层点击 三、代码实现1.设备获取2…

windows和office微软官方免费激活教程

微软提供了windows系统和office的官方免费激活&#xff0c;其实不用去买什么激活码&#xff0c;官方提供了激活方式&#xff0c;完全免费。目前测试没发现什么问题&#xff0c;windows还支持永久激活&#xff0c;比一些乱七八糟的kms激活工具还省心。 github地址&#xff1a;Gi…

《Ubuntu22.04环境下的ROS2学习笔记0》

一、下载并配置vscode 前面的安装过程就不再多赘述了&#xff0c;和ROS1中一样&#xff0c;参考链接在这里 《Ubuntu20.04环境下的ROS进阶学习1》_ubuntu20.04安装vscode及插件-CSDN博客 二、vscode扩展功能下载 a、简体中文语言包 中文语言包下载完后软件会提醒你restart软件…

博物馆藏品管理,从手动到智能:RFID手持扫描器的高效之旅

在博物馆藏品管理的漫长历史中&#xff0c;我们见证了从手工记录到数字化管理的巨大转变。今天&#xff0c;我们要讲述的&#xff0c;是这一转变中的一个重要里程碑——RFID手持扫描器的引入&#xff0c;它标志着博物馆藏品管理从手动走向智能的高效之旅。 首先&#xff0c;让我…

Java常见面试题-13-FastDFS

文章目录 FastDFS 是什么&#xff1f;FastDFS 组成FastDFS 的流程FastDFS 如何现在组内的多个 storage server 的数据同步&#xff1f; FastDFS 是什么&#xff1f; FastDFS 是一个开源的轻量级分布式文件系统&#xff0c;它可以对文件进行管理&#xff0c;功能包括&#xff1…

Linux驱动开发—中断,中断号,中断控制器GIC,中断子系统架构详解

文章目录 1.中断的基本概念2.中断上下文中断上下文的主要特点中断上下文的限制顶半部和底半部 3.中断子系统架构中断控制器GICGIC 的层级结构 中断控制器级联基本概念级联中断控制器的工作原理 中断号概念基本概念中断号的作用中断号的分配ARM 架构和 GIC 总体架构图 4.申请一个…

荒原之梦:考研期间可以玩游戏吗?

有不少同学&#xff0c;特别是男同学&#xff0c;在考研之前&#xff0c;会有玩游戏的习惯&#xff0c;那么&#xff0c;对于考研的同学来说&#xff0c;就会产生这样一个疑问。在考研备考期间&#xff0c;我还可以玩游戏吗&#xff1f; 其实关于这个问题的答案是因人而异的&am…

C语言—报数游戏

#include<stdio.h> #include<stdlib.h> #include<time.h> int main() {char op;int n 0, m, flag 0;srand(time(NULL));int x rand() % 2;if (x 0) printf("玩家先报&#xff01;\n");else printf("电脑先报&#xff01;\n");do{if …

【原创】java+swing+mysql学生管理系统设计与实现

个人主页&#xff1a;程序员杨工 个人简介&#xff1a;从事软件开发多年&#xff0c;前后端均有涉猎&#xff0c;具有丰富的开发经验 博客内容&#xff1a;全栈开发&#xff0c;分享Java、Python、Php、小程序、前后端、数据库经验和实战 开发背景&#xff1a; 这两天简单开发…

【数据结构】Map与Set

前言 前两篇文章我们研究了二叉搜索树与哈希表的结构与特点&#xff0c;他们二者是Map与Set这两个接口实现的底层结构&#xff0c;他们利用了搜索树与哈希表查找效率高这一特点&#xff0c;是一种专门用来进行搜索操作的容器或数据结构。本篇文章就让我们一起来梳理这两个接口的…

CTFHUB | web进阶 | PHP | Bypass disable_function | Backtrace UAF

开启题目 查看源码&#xff0c;发现可以蚁剑连接 进入之后无发现&#xff0c;使用插件 PHP7 Backtrace UAF 之后直接进入终端了 查看根目录之后发现了有两个 flag 文件&#xff0c;之后发现了本题的 flag

[SWPU2019]Web11

打开题目&#xff0c;看到登录口&#xff0c;注册账号看看 admin2&#xff0c;112 申请发布一下广告&#xff0c;sql注入试试 查看详情 看到sql&#xff0c;猜测sql注入&#xff0c;进行测试时发现空格、or、#、--、and等进行了过滤&#xff0c;目前基本可以确定注入点在这个地…

缺人!需求暴涨超300%!年薪超50万元!这一风口,带来大机遇

目前&#xff0c;秋季招聘快来了&#xff0c;随着人工智能应用的爆发&#xff0c;生成式人工智能的招聘市场也十分火爆。 在一家大型人工智能软件公司&#xff0c;团队负责人告诉记者&#xff0c;团队主要做基于大模型的办公协作类软件的开发&#xff0c;近期正在升级一款面向…

macOS Ventura 13.6.9 (22G830) Boot ISO 原版可引导镜像下载

macOS Ventura 13.6.9 (22G830) Boot ISO 原版可引导镜像下载 2024 年 8 月 8 日凌晨&#xff0c;macOS Sonoma 14.6.1 发布&#xff0c;本更新包含了重要的错误修复&#xff0c;并解决了导致高级数据保护无法启用或停用的问题。同时带来了 macOS Ventura 13.6.9 安全更新。 …

LVS(Linux virual server)详解

目录 一、LVS&#xff08;Linux virual server&#xff09;是什么&#xff1f; 二、集群和分布式简介 2.1、集群Cluster 2.2、分布式 2.3、集群和分布式 三、LVS运行原理 3.1、LVS基本概念 3.2、LVS集群的类型 3.2.1 nat模式 3.2.2 DR模式 3.2.3、LVS工作模式总结 …

IntelliJ IDEA 2024.2 发布:Spring Data JPA即时查询、自动补全cron表达式

今早看到&#xff0c;IntelliJ IDEA 2024.2 发布的邮件提示&#xff0c;看了一眼这个版本更新的新特性真的太适合我了&#xff01;也许这些能力对关注DD的小伙伴也有帮助&#xff0c;所以搞篇博客介绍和推荐一下。下面就来一起看看这个版本中推出的几个强大新特性。 Spring Da…

解密 Coretime:Polkadot 区块链资源分配的新革命

作者&#xff1a;PaperMoon Kaichao 高峰期打车&#xff0c;小编往往需要承受溢价车费&#xff0c;甚至还要不停加上小费&#xff0c;才可能在“前方排队 300人”的恐怖等待中获得优先打车的机会。但实际上&#xff0c;只要走出了拥挤路段&#xff0c;即使是高峰期&#xff0c…