首页 > 其他分享 >后端业务实现(一)登录功能实现

后端业务实现(一)登录功能实现

时间:2024-08-04 22:24:27浏览次数:12  
标签:功能 graphic 登录 实现 验证码 ran new public

前两篇中我们分别进行了SSM框架的搭建与前端页面的简单搭建,这篇我们就进行登录业务的编写

目录

前言

一、页面跳转实现

二、验证码的实现

三、登录操作的实现

总结


前言

 这篇我们主要实现登录功能与页面的跳转

之前已经设置好了所有依赖,详情请看这篇文章:

基于SpringFramework + MyBatis + SpringMVC三大框架下的Maven项目-CSDN博客


一、页面跳转实现

1、由于我们已经在SpringMVC的配置文件中添加了视图解析器,而SpringMVC已经交由Spring容器管理,当我们在web.xml文件中进行servlet配置后,只需我们可以在控制类中添加一个页面跳转方法实现页面的跳转,这样就无需设置<welcome-file-list>标签;

@Controller
public class PageControl {
    @GetMapping("/")
    public ModelAndView index(){
        return new ModelAndView("mgrLogin");
    }
    
    @GetMapping("/page")
    public ModelAndView page(HttpServletRequest request, HttpServletResponse response){
        String path = request.getParameter("p");
        if (path !=null){
            return new ModelAndView(path);
        }else {
            return new ModelAndView("mgrLogin");
        }
    }
}

2、这时我们运行Tomcat服务器,可能会发现我们的CSS样式没有了

这是因为IDEA会自动为将路径更改为../的形式,我们只需要将这个../删除即可,

文件路径的含义可以参考这篇文章:文件路径中的‘.‘和‘..‘还有‘./‘和‘../‘分别都是什么意思,以及路径输入的问题_文件路径..-CSDN博客

注意如有引用JavaSrcipt文件,也需要更改路径

这样,我们的样式就恢复了

二、验证码的实现

上图,是我们的登录界面只是单纯的账号和密码,对于一个普通的登录页面来说可能都会有输入验证码的操作,所以在开始业务之前,我们可以先增加一个验证码

1、现在html中添加一个标签

<!-- 验证码 -->
 <div class="with-padding" style="margin-top: 30px;">
   <div class="input-group">
      <span class="input-group-addon" style="height: 40px;">验证码</span>
      <input id="code" type="text" class="form-control" placeholder="请输入验证码" style="height: 40px;">
      <span class="input-group-addon fix-border fix-padding" style="height: 40px;"></span>
      <img src="code" height="30px" width="150px" onclick="changeCode(this)" class="form-control" id="codeImg" style="height: 40px;">
   </div>
</div>

2、添加JavaScript

function changeCode(imgObj)  {
    imgObj.src = imgObj.src + '?' + Math.random();
}

3、在IDEA中新建类CodePicture用于设置验证码,并创建util包,方便管理

构造codePicture方法,实现验证码图片的显示

/**
 * @ Author wave
 * @ Date 2024/7/29 10:43
 * @ Description TODO 验证码图片显示
 */

public class CodePicture {
    private static final char[] chars = ("123456789" + "ABCDEFGHJKMNPQRSTUVWXYZ").toCharArray();  // 验证码字符集
    private static final int SIZE = 4;  // 字符数量
    private static final int LINES = 6;  // 干扰线数量
    private static final int WIDTH = 150;  // 宽度
    private static final int HEIGHT = 30;  // 高度
    private static final int FONT_SIZE = 30;  // 字体大小

    /**
     * 生成随机验证码及图片
     */
    public static Object[] createImage() {
        StringBuffer sb = new StringBuffer();
        // 1.创建空白图片
        BufferedImage image = new BufferedImage(
                WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
        // 2.获取图片画笔
        Graphics graphic = image.getGraphics();
        // 3.设置画笔颜色
        graphic.setColor(Color.WHITE);
        // 4.绘制矩形背景
        graphic.fillRect(0, 0, WIDTH, HEIGHT);
        // 5.画随机字符
        Random ran = new Random();
        for (int i = 0; i < SIZE; i++) {
            // 取随机字符索引
            int n = ran.nextInt(chars.length);
            // 设置随机颜色
            graphic.setColor(getRandomColor());
            // 设置字体大小
            graphic.setFont(new Font(
                    null, Font.BOLD + Font.ITALIC, FONT_SIZE));
            // 画字符
            graphic.drawString(
                    chars[n] + "", i * WIDTH / SIZE, HEIGHT / 2 + 10);
            // 记录字符
            sb.append(chars[n]);
        }
        // 6.画干扰线
        for (int i = 0; i < LINES; i++) {
            // 设置随机颜色
            graphic.setColor(getRandomColor());
            // 随机画线
            graphic.drawLine(ran.nextInt(WIDTH), ran.nextInt(HEIGHT),
                    ran.nextInt(WIDTH), ran.nextInt(HEIGHT));
        }
        // 7.返回验证码和图片
        return new Object[]{sb.toString(), image};
    }

    /**
     * 随机取色
     */
    public static Color getRandomColor() {
        Random ran = new Random();
        Color color = new Color(ran.nextInt(256),
                ran.nextInt(256), ran.nextInt(256));
        return color;
    }
}

 4、在IDEA中新建Crotrol类,添加@RestController注解,json解析便携处理

@RestController // @Controller 和 @ResponseBody 的组合注解
public class LoginControl {
    @GetMapping("code")
    public void codePicture(HttpServletRequest request, HttpServletResponse response) throws IOException {
        Object[] codeArr = CodePicture.createImage();
        Object codeStr = codeArr[0];
        request.getSession().setAttribute("code", codeStr);
        ImageIO.write((RenderedImage) codeArr[1], "jpg", response.getOutputStream());
    }
}

效果如图所示,点击图片后可以进行切换:

三、登录操作的实现

首先我们需要在config.properties将数据库信息填写好,并在数据库中添加一些数据,方便我们使用

1、将数据库中的字段在pojo层中进行实例化,我们可以通过IDEA的快捷操作进行实现

2、如果使用IDEA的快捷方式进行pojo的搭建,注意选择对应的包,更改实例的包名

由于之前我们添加了lombok的插件,所以只需要在方法前添加注解@Data,就无需在编写set()、get()方法,会自动生成

如果@Data注解无法使用,在IDEA中菜单栏中File-Settings-Plugings中进行插件的添加

3、在service层中进行登录方法接口的编写

4、在mapper层中进行登录SQL方法的接口编写

5、在impl层中进行service接口中方法的实现

6、在resources文件夹中的mapper文件夹中新建AdminInfoMapper.xml文件进行sql语句的编写

编写sql语句最好在navicat中进行,这样不容易出错

推荐添加一个MaBatisX的插件,十分好用,这样可以直接将mapper层接口与mapper.xml文件进行连接跳转,图中的小鸟logo

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="">

</mapper>

7、在控制类中进行编写登录相关的操作编写

        1)在此之前,我们可以先建一个dto层用于登录相关数据的传输

        

        2、dto类建好之后,就可以在控制层中编写方法,与前端页面进行交互

        

8、在js文件中进行ajax操作的编写

至此,我们的登录操作就完成了,启动Tomcat服务器即可进行登录

注:以上实现登录操作时并未添加验证码的判定


总结

以上便是对登录操作的基本实现,进行编码时注意对注解的正确使用,sql语句的写法也尤为重要

标签:功能,graphic,登录,实现,验证码,ran,new,public
From: https://blog.csdn.net/m0_64337048/article/details/140910788

相关文章

  • ECharts与数据可视化:如何高效使用JavaScript实现复杂图表
    ECharts与数据可视化:如何高效使用JavaScript实现复杂图表大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在现代网页开发中,数据可视化已成为展示复杂数据的关键手段。ECharts是一个强大的JavaScript图表库,可以帮助开发者轻松实现各种复杂的图表。本文......
  • 守护数据堡垒:SQL Server数据库自定义备份审计实现指南
    标题:守护数据堡垒:SQLServer数据库自定义备份审计实现指南引言数据库备份是确保数据安全和业务连续性的关键措施。SQLServer提供了多种备份策略,但有时候,为了满足特定的合规性要求或业务需求,我们需要实现更细粒度的自定义数据备份审计。本文将详细介绍如何在SQLServer中......
  • 无缝编码体验:在PyCharm中高效使用远程文件编辑功能
    标题:无缝编码体验:在PyCharm中高效使用远程文件编辑功能引言PyCharm作为业界领先的集成开发环境(IDE),提供了强大的本地和远程开发功能。其中,远程文件编辑功能允许开发者直接在PyCharm中编辑存储在远程服务器上的文件,极大地提高了开发效率和便捷性。本文将详细介绍如何在PyCha......
  • 使用django-treebeard实现树类型存储与编辑
    前言其实之前做很多项目都有遇到跟树相关的功能,以前都是自己实现的,然后前端很多UI组件库都有Tree组件,套上去就可以用。不过既然用Django了,还是得充分发挥一下生态的优势,但是我找了半天,也就这个treebeard能用,其他要不停更了要不就功能很拉,没有可视化编辑树的功能。难道Djang......
  • redis通过滑动窗口实现限流
    一、什么是滑动窗口限流滑动窗口限流是一种流量控制策略,用于控制在一定时间内允许执行的操作数量或请求频率。它的工作方式类似于一个滑动时间窗口,对每个时间窗口的请求数量进行计数,并根据预先设置的限流策略来限制或调节流量,通常包括以下几个要素:时间窗口:限流的时间段,例如每秒、......
  • WiFiAp探究实录--功能实现与源码分析
    wifi热点说的是wifiAp相关,所以如果源码开发的话,这个WifiAp算是一个搜索代码的关键字,含义是WifiAccesspoint,wifi接入点。所以下文中的wifi热点统一用WifiAp代替wifiAp打开方式:设置->更多->移动网络共享->便携式wlan热点。wifiAp打开条件:任何情况下均可。只是有内网外网之分......
  • html+css 实现hover边框彩色流动
    前言:哈喽,大家好,今天给大家分享html+css绚丽效果!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦......
  • MATLAB边缘检测系统实现
    MATLAB边缘检测一、目的: 熟悉边缘检测原理,并运用matlab软件实现图像的canny边缘检测,体会canny边缘检测的优缺点。二、内容:编写matlab程序,实现对lena图像的边缘检测,输出程序运行结果。三、原理或步骤:首先回顾一下边缘检测的一般步骤:边缘检测算法一般包含如下四个步骤:1.......
  • 用Manim实现——计算和绘制图形下方区域
    用Manim实现——计算和绘制图形下方区域get_area 函数    get_area是一个用于计算和绘制图形下方区域的函数,常用于图形动画库(如Manim)get_area(graph,x_range=None,color=(ManimColor('#58C4DD'),ManimColor('#83C167')),opacity=0.3,bounded_graph=None,**kwar......
  • 模拟实现 srtcat(字符串追加) --浅谈C语言
    strcat描述char*strcat(char*dest,constchar*src)把src所指向的字符串追加到dest所指向的字符串的结尾。声明下面是strcat()函数的声明。char*strcat(char*dest,constchar*src)参数dest--指向目标数组,该数组包含了一个C字符串,且足够容纳追加后的字符......