SpringBoot + layui 框架实现一周免登陆功能

news2024/7/4 6:19:41

在这里插入图片描述

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:SpringBoot 框架从入门到精通
✨特色专栏:国学周更-心性养成之路
🥭本文内容:SpringBoot + layui 框架实现一周免登陆功能

在这里插入图片描述
要实现一周免登录功能,您可以使用Spring Boot和Layui框架配合完成。以下是一种可能的实现方式:

创建一个名为User的实体类,用于表示用户信息,其中包含用户的用户名和密码等字段,以及用于标记用户是否选择一周免登陆的rememberMe字段。

@Entity
@Table(name = "users")
public class User implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(unique = true, nullable = false)
    private String username;

    @Column(nullable = false)
    private String password;

    private boolean rememberMe;

    // Getters and Setters
    // ...
}

创建一个名为UserRepository的接口,用于对User实体进行数据库操作。

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    User findByUsername(String username);
}

创建一个名为UserService的服务类,用于处理用户相关的业务逻辑。在这个类中,添加一个方法用于验证用户的登录,并根据用户是否选择一周免登陆来设置相关的Cookie。

@Service
public class UserService {
    private UserRepository userRepository;

    @Autowired
    public void setUserRepository(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public boolean login(String username, String password, boolean rememberMe, HttpServletResponse response) {
        User user = userRepository.findByUsername(username);
        if (user != null && user.getPassword().equals(password)) {
            if (rememberMe) {
                // 设置一周免登陆的Cookie,有效期为7天
                Cookie cookie = new Cookie("rememberMe", "true");
                cookie.setMaxAge(7 * 24 * 60 * 60);  // 7天的秒数
                cookie.setPath("/");
                response.addCookie(cookie);
                user.setRememberMe(true);
                userRepository.save(user);
            }
            return true;
        }
        return false;
    }
}

创建一个名为LoginController的控制器类,用于处理用户登录的请求。

@Controller
public class LoginController {
    private UserService userService;

    @Autowired
    public void setUserService(UserService userService) {
        this.userService = userService;
    }

    @RequestMapping("/login")
    public String login(String username, String password, boolean rememberMe, HttpServletResponse response) {
        if (userService.login(username, password, rememberMe, response)) {
            return "redirect:/home";  // 登录成功后跳转到主页
        }
        return "redirect:/login?error";  // 登录失败跳转回登录页面,并带上错误参数
    }
}

在对应的登录页面中使用Layui框架的表单组件,将用户名、密码和记住我选项组织成一个表单,并向LoginController的登录请求发送POST请求。

<!DOCTYPE html>
<html>
<head>
    <title>登录</title>
    <!-- 引入Layui的相关资源 -->
    <link rel="stylesheet" href="https://cdn.staticfile.org/layui/2.5.4/css/layui.min.css">
    <script src="https://cdn.staticfile.org/layui/2.5.4/layui.min.js"></script>
</head>
<body>
    <div class="layui-container">
        <form class="layui-form" action="/login" method="post">
            <div class="layui-form-item">
                <label class="layui-form-label">用户名</label>
                <div class="layui-input-block">
                    <input type="text" name="username" lay-verify="required" autocomplete="off" placeholder="请输入用户名" class="layui-input">
                </div>
            </div>
            <div class="layui-form-item">
                <label class="layui-form-label">密码</label>
                <div class="layui-input-block">
                    <input type="password" name="password" lay-verify="required" autocomplete="off" placeholder="请输入密码" class="layui-input">
                </div>
            </div>
            <div class="layui-form-item">
                <div class="layui-input-block">
                    <input type="checkbox" name="rememberMe" title="记住我" lay-skin="primary">
                    <button class="layui-btn" lay-submit lay-filter="formDemo">登录</button>
                </div>
            </div>
        </form>
    </div>

    <script>
        layui.use(['form'], function() {
            var form = layui.form;

            // 表单验证
            form.verify({
                required: function(value, item) {
                    if(value.length < 1) {
                        return '该项不能为空';
                    }
                }
            });

            // 监听表单提交
            form.on('submit(formDemo)', function(data) {
                // 获取表单数据并提交
                var username = data.field.username;
                var password = data.field.password;
                var rememberMe = data.field.rememberMe === 'on';

                // 发送AJAX请求提交登录表单
                $.ajax({
                    url: '/login',
                    type: 'POST',
                    data: {
                        username: username,
                        password: password,
                        rememberMe: rememberMe
                    },
                    success: function(res) {
                        // 登录成功后的逻辑处理
                        if (res.success) {
                            window.location.href = '/home';
                        } else {
                            layer.msg(res.message, {icon: 2});
                        }
                    },
                    error: function() {
                        layer.msg('服务器错误', {icon: 2});
                    }
                });

                return false; // 阻止表单提交
            });
        });
    </script>
</body>
</html>

在上述代码中,我们使用了Layui的form模块进行表单的验证和提交。form.verify()函数用于定义表单字段的验证规则,这里只提供了一个required规则作为示例。

form.on(‘submit(formDemo)’, function(data) {})函数用于监听表单提交事件,并在提交时使用AJAX发送登录请求。提交成功后,根据服务器的响应进行相应的处理。


  码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

在这里插入图片描述

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

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

相关文章

便携式明渠流量计工作原理

便携式明渠流量计工作原理是什么&#xff1f; 简单来说便携式明渠流量计是一种用于测量明渠水流量的仪器。它的工作原理基于流速-水位关系&#xff0c;通过测量水流速度和水位差来计算明渠的流量。 具体原理如下&#xff1a; 1.测量水流速度&#xff1a;通常使用悬挂在水中的水…

Kubernetes快速进阶与实战:构建可靠的容器化应用平台

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 1. 什么是Kubernetes&am…

企业面临的IP风险,如何应对?

IP风险画像为企业或组织在知识产权领域面临的潜在风险和威胁的综合概览。通过对相关知识产权的保护和管理&#xff0c;企业可以预测和应对潜在的法律、商业和声誉风险。 IP数据云帮助企业更好地了解和应对知识产权方面的风险。并提供了关于当前全球知识产权环境的重要信息&…

Yolov8原理详细解析!一文看懂

引言 Yolo(You Only Look Once)是一种one-stage目标检测算法&#xff0c;即仅需要 “看” 一次就可以识别出图片中物体的class类别和边界框。Yolov8是Ultralytics公司最新推出的Yolo系列目标检测算法&#xff0c;可以用于图像分类、物体检测和实例分割等任务。 根据官方描述&…

linux添加sht3x温湿度传感器驱动记录

最近拿到一块imx6ull板子&#xff0c;上面有一颗温湿度传感器sht30,需要读取其数值。本人能力有限&#xff0c;自己写驱动还有一点困难&#xff0c;好在 linux内核里自带了很多器件的驱动&#xff0c;只需要找到相关的驱动文件根据要求修改一下设备树、添加进内核里编译就可以。…

【ES】Elasticsearch 常见的简单查询

查看es中有哪些索引 请求方式&#xff1a;GET 请求地址&#xff1a;http://localhost:9200 /_cat/indices?v 参数&#xff1a;无 结果&#xff1a; 查看索引全部数据 请求方式&#xff1a;GET 请求地址&#xff1a;http://localhost:9200/index-2023-08/_search 参数&a…

VUE之jspreadsheet电子excel表格实时动态高度设置

问题&#xff1a;excel电子表格在不同屏幕大小下横向滚动条会被遮挡 排查原因&#xff1a;由于excel高度固定导致 解决方法&#xff1a;设计页面较多&#xff0c;所以封装公共方法 步骤&#xff1a; 1.使用混入封装动态设置excel高度方法&#xff1a; const mixinJexcel …

MySQL行格式 又称 记录格式

行格式 ROW_formate compact 行格式dynamic 行格式 默认compress 行格式 行格式定义 创建表同时指定行格式 create table 表明 ( 列的信息) row_formate行格式名称 修改行格式 alter table 表明 ROW_FORMATE 行格式名称 查看mysql8.0 默认行格式 select innodb_default_row_…

HTTP状态码504(Gateway Timeout)报错原因分析和解决办法

文章目录 504报错原因分析一、用户角度1. 代理服务器问题2. 网络问题 二、网站管理员角度1. 服务器负载过重2. 网关配置问题3. 目标服务器响应慢4. IIS/nginx/apache服务关闭5. 维护或故障6. 数据库的慢处理也会导致504 用户角度可以采取哪些措施解决504错误1. 刷新页面2. 检查…

Viobot定位用于导航

注&#xff1a;此教程以轮式机器人作为一个样例&#xff0c;具体的应用还需要用户自己去做更深入的开发。当然&#xff0c;着并不是唯一的方法&#xff0c;有更好的方法也欢迎大家讲一下自己的思路&#xff0c;有什么说错的地方也欢迎大家批评指正。 路径规划部分我们选用轮式机…

什么是量化交易接口?(股票下单接口)特点(一)

股市领域里的量化交易接口是一种用于与金融市场进行交互的编程接口&#xff0c;它允许开发者通过计算机程序自动执行交易策略。量化交易接口通常提供以下功能&#xff1a; 1. 实时市场数据获取&#xff1a;量化交易接口通常可以提供实时的市场行情数据&#xff0c;包括股票、期…

el-upload 上传附件

案例: <template><div><el-drawertitle"附件信息"v-model"drawer"direction"rtl":before-close"handleClose"size"35%":close-on-click-modal"false":close-on-press-escape"false">…

2. 配置版本

2.1 安装 Python 版本 ① 首先打开 Anaconda 的 Prompt 终端&#xff0c;输入 jupyter kernelspec list&#xff0c;查看已经安装的 python 版本。如下图所示&#xff0c;只有 Anaconda 自带的 python3。 ② 输入 conda create --name py3.6.3 python3.6.3 命令&#xff0c;输…

rman备份数据文件和归档指定不同的filesperset

客户说带库上抓小文件会导致带库紧张。 大部分的备份软件都会用filesperset参数来做备份&#xff0c;这样恢复速度快&#xff0c;而且也有利于带库重复删除。 客户用的plus archivelog的形式&#xff0c;一条命令的做全备&#xff0c;现在就有filesperset不区分dbf和arc的情况…

Java之API详解之Objects类的详细解析

5 Objects类 5.1 概述 tips&#xff1a;了解内容 查看API文档&#xff0c;我们可以看到API文档中关于Objects类的定义如下&#xff1a; Objects类所在包是在java.util包下&#xff0c;因此在使用的时候需要进行导包。并且Objects类是被final修饰的&#xff0c;因此该类不能被继…

跨境电商独立站如何实现全球开店,获得更多流量?

对于独立站卖家来说&#xff0c;针对一个国家搭建一个站点、运营&#xff0c;就已经要花上不少力气了。更别说想要在多个市场售卖了&#xff0c;每个国家不同的货币、语言、定价、付款方式等等就已经够让人头大。 研究显示&#xff0c;40%的人不会从其他语言的网站上购买产品。…

Windows系统配置jar包自启动

目录 一、下载 WinSW.NET4.exe二、创建windows的目录结构三、编写xml配置文件四、检查环境4.1 是否安装jdk4.2 是否存在.net framework4的服务 五、安装 一、下载 WinSW.NET4.exe https://github.com/winsw/winsw/releases 下载完毕改名为jar名&#xff0c;也就是 项目.exe64位…

QT使用QImage做图片切割

#include "mainwindow.h" #include "ui_mainwindow.h" #include <QFileDialog> #include <QDebug>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow) {ui->setupUi(this);// 选择本地图片文件QString …

了解java中的通配符“?“

目录 通配符的作用 先看一段代码 用通配符"?"后,代码变化 结论 通配符上界 通配符下界 对通配符上下界的注释理解及其练习代码 简记: ? 用于在泛型的使用&#xff0c;即为通配符. 在Java中&#xff0c;通配符&#xff08;wildcard&#xff09;主要用于泛型…

11.物联网lwip,网卡原理

一。LWIP协议栈内存管理 1.LWIP内存管理方案 &#xff08;1&#xff09;堆heap 1.灰色为已使用内存 2.黑色为未使用内存 3.紫色为使用后内存 按照某种算法&#xff0c;把数据放在内存块中 &#xff08;2&#xff09;池pool 设置内存池&#xff0c;设置成大小相同的内存块。 2…