登录功能(基于SpringBoot+MP+Vue实现的功能)

news2025/8/1 18:11:56

目录

前言

一、UserMapper层代码分析

二、UserService层代码分析

1.UserService接口

2.UserServiceImpl实现类

3.UserController层代码分析 

 4.拦截器设置

 5.展示效果图

总结


前言

      登录功能是web开发中常见的功能,也是学后端必须要练得一个功能,本次的登录功能相对完善一些,知识拦截器部分写的比较少,这部分提供给大家思考和完善相应的功能。这个功能已达到毕设的水准,基本知识点都是按照毕设的常用的知识点去编写的。


一、UserMapper层代码分析

创建接口UserMapper并实现MP的基本步骤。

@Repository
public interface UserMapper extends BaseMapper<User> {
}

二、UserService层代码分析

1.UserService接口

创建登录所需的方法。

public interface UserService {
//    登录
    User login(String username, String password);
}

2.UserServiceImpl实现类

将Controller层传过来的用户名和密码先进行对密码使用MD5进行加密(数据库表存储的密码是加密后的密文,以保证用户密码的安全性),然后在进行MP的条件查询访问数据库查询该用户名和密码的用户。

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;
    @Override
    public User login(String username, String password) {
        //加密
        String passwordWithMd5 = MD5Util.md5(password);

        //根据用户名和加密之后的密码从数据库查询用户
        //select * from user where username = ? and password = ?
        LambdaQueryWrapper<User> wrapper=new LambdaQueryWrapper<User>();
        wrapper.eq(User::getUsername,username)
                .eq(User::getPassword,passwordWithMd5);
        //返回查询结果
        return userMapper.selectOne(wrapper);
    }
}

3.UserController层代码分析 

对登录进行判断是否登录成功,给前端返回Map集合{“code”,"0"}为登录失败返回的内容。Map集合{“code”,"1"}为登录成功返回的内容。登录成功需要用JWT技术返回一个令牌(token)。

@RestController
public class UserController {
    @Autowired
    private UserService userService;
    Map<String,String> map=new HashMap<>();
//    登录
    @RequestMapping("/admin/user/login")
    public Map<String,String> login(String username,String password){
        User user=userService.login(username,password);
        if(user==null){//登录失败
            map.put("code","0");
        }else {//登录成功
            HashMap<String,Object> tokenMap = new HashMap();
            tokenMap.put("id", user.getId());
            String token = JwtUtil.createToken(tokenMap);
            map.put("token",token);
            map.put("code","1");
        }
        return map;
    }
}

JWT 技术创建token、解析token代码。

//JWT的生成和解析
public class JwtUtil {
    // 创建token
    public static String createToken(Map claims) {
        return Jwts.builder()
                .setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 24))//设置有效时间为1天
                .setClaims(claims) //设置响应数据体
                .signWith(SignatureAlgorithm.HS256, "heima_movies") //设置加密方法和加密盐
                .compact();
    }

    // 解析token
    public static Map parseToken(String token) {
        return Jwts.parser().setSigningKey("heima_movies")
                .parseClaimsJws(token)
                .getBody();
    }
}

 4.拦截器设置

访问拦截器时查看上面的token是否存在,存在则用户登录成功状态放行,否则禁止通行返回401状态码。

//访问拦截器
@Component
public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        try {
            String token = request.getHeader("token");//从请求头获取token
            Map map = JwtUtil.parseToken(token);
            BeanUtil.mapToBean(map, Member.class, true);
            return true;//放行
        } catch (Exception e) {
            response.setStatus(401);
            return false;//禁止通行,返回401状态码
        }
    }
}

拦截器需拦截的内容和放行的路径设置。将管理员部分路径拦截不让普通用户访问。

@Configuration
public class ManagerConfig implements WebMvcConfigurer {

    @Autowired
    private LoginInterceptor loginInterceptor;

    //设置拦截器
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //定义放行路径
        ArrayList<String> urls = new ArrayList<>();
        urls.add("/**/*.js");//管理系统静态资源
        urls.add("/**/*.css");//管理系统静态资源
        urls.add("/**/*.jpg");//管理系统静态资源
        urls.add("/**/*.png");//管理系统静态资源
        urls.add("/**/*.html");//管理系统静态资源
        urls.add("/admin/user/login");//管理系统登录请求
        urls.add("/admin/user/logout");//管理系统退出请求

        //配置拦截器和路径
        registry.addInterceptor(loginInterceptor)
                .addPathPatterns("/admin/**")//拦截所有
                .excludePathPatterns(urls); //放行指定路径
    }
}

 5.展示效果图

登录页,在不输入用户名和密码访问路径http://localhost:8080/index.html会跳转到登录页面,被拦截器拦截,

 输入正确的用户名和密码后跳转到主页面。

f12查看token存在的位置和值(这也是有令牌才可正常进入主功能页面)


总结

  基于SpringBoot+MP+VUE的登录功能的实现考虑的相对全面,可作为毕设的参考。但VUE方面的代码在这里没有展示。想要了解的可以自己学学Vue知识点,主要还是JWT技术的运用。还有后端的代码逻辑的分析。 

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

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

相关文章

【JavaWeb】手写一个Servlet+JSP+JavaBean分页

✅✅作者主页&#xff1a;&#x1f517;孙不坚1208的博客 &#x1f525;&#x1f525;精选专栏&#xff1a;&#x1f517;JavaWeb从入门到精通&#xff08;持续更新中&#xff09; &#x1f4cb;&#x1f4cb; 本文摘要&#xff1a;本篇文章主要分享如何使用ServletJSPJavaBean…

C++对象拷贝

前言&#xff1a;本教程使用到的工具是vs2010&#xff1b;能用VC6就用VC6&#xff0c;因为vs2010生成的汇编代码可能有点乱&#xff1b;此外&#xff0c;文章中涉及的汇编&#xff0c;我都会予以解释&#xff0c;所以放心观看。 目录 一、什么是对象拷贝&#xff1f; 二、C对…

【微服务】SpringCloud微服务剔除下线源码解析

&#x1f496; Spring家族及微服务系列文章 ✨【微服务】SpringCloud微服务续约源码解析 ✨【微服务】SpringCloud微服务注册源码解析 ✨【微服务】Nacos2.x服务发现&#xff1f;RPC调用&#xff1f;重试机制&#xff1f; ✨【微服务】Nacos通知客户端服务变更以及重试机制 ✨【…

SpringBoot SpringBoot 开发实用篇 4 数据层解决方案 4.4 Redis 下载安装与基本使用

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇4 数据层解决方案4.4 Redis 下载安装与基本使用4.4.1 问题引入4.4.2 …

Linux Mint(Ubuntu)上 安装 效率神器 utools

Linux Mint&#xff08;Ubuntu&#xff09;上 安装 效率神器 utools 我的 Windows 系统的笔记本只有 256G 固态&#xff0c;磁盘已经快用满了&#xff0c;最近想装个 Linux 玩玩&#xff0c;1 选择了 Linux Mint&#xff0c;然后就在闲置的移动硬盘上安装了 Linux Mint 21 cin…

Centos 安装Java库的多种方式

安装jdk(介绍三种方法) 查看java版本&#xff1a;java -version 方法一&#xff1a;利用yum源来安装jdk&#xff08;此方法不需要配置环境变量&#xff09; 查看yum库中的java安装包 &#xff1a;yum -y list java* 安装需要的jdk版本的所有java程序&#xff1a;yum -y instal…

纯正体验,极致商务 | 丽亭酒店聚焦未来赛道,实现共赢发展

10月28日&#xff0c;锦江酒店(中国区)“齐鲁集锦 共话未来”投资人交流会在济南盛大召开&#xff0c;面向华东地区投资人&#xff0c;行业专家、商旅客、品牌代表齐聚一堂&#xff0c;共同聚焦酒店市场投资新价值&#xff0c;商讨新时代酒店行业新机遇&#xff0c;多维探索酒店…

蓝牙数据包协议解析

1.前言 由于工作需要&#xff0c;初次接触蓝牙。从最基础的知识开始了解。 引用wiki中的介绍&#xff1a; 蓝牙&#xff08;英语&#xff1a;Bluetooth&#xff09;&#xff0c;一种无线通讯技术标准&#xff0c;用来让固定与移动设备&#xff0c;在短距离间交换资料&#xff…

第一章:Spring流程执行步骤

Spring执行流程图 注意观察&#xff1a;每一个执行步骤的结果都会返回到DispatcherServlet &#xff0c;然后再出发调用&#xff0c; 所以是请求接口的入口也是出口。 简单了解几个大类的走的流程和具体功能 DispatcherServlet 类 中文调度应用程序&#xff0c;而Servlet就…

libusb系列-007-Qt下使用libusb1.0.26源码

libusb系列-007-Qt下使用libusb1.0.26源码 文章目录libusb系列-007-Qt下使用libusb1.0.26源码摘要安装编译环境确认需要的文件开始编译错误1&#xff1a;找不到文件错误2&#xff1a;expected错误3&#xff1a;SCM_CREDENTALS错误4&#xff1a;类型冲突错误5 assert断言错误错误…

低代码平台和无代码平台有什么区别

低代码&#xff08;LowCode&#xff09;/无代码(NoCode)”是技术界近几年的热门词汇之一&#xff0c;随着企业数字化发展的深入&#xff0c;越来越多的场景化需求要求企业具备更加灵活敏捷的应用开发能力&#xff0c;传统应用开发模式周期长、技术人员能力要求高&#xff0c;无…

OWASP API SECURITY TOP 10

目录 1. API 安全风险 2. 细说TOP10 1. Broken Object Level Authorization 2. Broken User Authentication 3 Excessive Data Exposure 4 Lack of Resources & Rate Limiting 5 Broken Function Level Authorization 6 Mass Assignment 7 security misconfigura…

redis哨兵系列1

需要配合源码一起康~ 9.1 哨兵基本概念 官网手册yyds&#xff1a;https://redis.io/docs/manual/sentinel/ redis主从模式&#xff0c;如果主挂了&#xff0c;需要人工将从节点提升为主节点&#xff0c;通知应用修改主节点的地址。不是很友好&#xff0c;so Redis 2.8之后开…

同花顺_代码解析_技术指标_EJK

本文通过对同花顺中现成代码进行解析&#xff0c;用以了解同花顺相关策略设计的思想 目录 EMV ENV EXPMA JF_ZNZX KD KDJ KDJFS EMV 简易波动指标 1.EMV 由下往上穿越0 轴时&#xff0c;视为中期买进参考信号&#xff1b; 2.EMV 由上往下穿越0 轴时&#xff0c;视为中…

根据以下电路图,补全STM32F103RCT6的IO口初始化程序

void KEY_Init(void)//接按键的端口初始化程序 { RCC->APB2ENR|______________; //使能PORTA时钟 JTAG_Set(SWD_ENABLE); GPIOA->CRL&__________________; // PA3设置成下拉输入 GPIOA->CRL|__________________; } void LED_Init(void)//接LED的端…

【Qt】控件探幽——QLineEdit

注1&#xff1a;本系列文章使用的Qt版本为Qt 6.3.1 注2&#xff1a;本系列文章常规情况下不会直接贴出源码供复制&#xff0c;都以图片形式展示。所有代码&#xff0c;自己动手写一写&#xff0c;记忆更深刻。 本文目录QLineEdit探幽1、设置数据/获取数据2、只读&#xff08;re…

【15-项目中服务的远程调用之OpenFeign订单模块与商品模块集成使用OpenFeign的案例】

一.知识回顾 【0.三高商城系统的专题专栏都帮你整理好了&#xff0c;请点击这里&#xff01;】 【1-系统架构演进过程】 【2-微服务系统架构需求】 【3-高性能、高并发、高可用的三高商城系统项目介绍】 【4-Linux云服务器上安装Docker】 【5-Docker安装部署MySQL和Redis服务】…

【面试题】圣杯布局和双飞翼布局

圣杯布局和双飞翼布局的特点&#xff1a; 三栏布局&#xff0c;中间一栏最先加载和渲染&#xff08;内容最重要&#xff09;两侧内容固定&#xff0c;中间内容随着宽度自适应一般用于PC页面 圣杯布局和双飞翼布局的实现方式&#xff1a; 使用float布局两侧使用margin负值&am…

git 、gitLub 提交后查看显示全部删除又全部新增

问题&#xff1a; git提交后删除的行数与增加的行数一样&#xff0c;没有修改git也会去全部删除又全部新增 大概是下面你这个样子&#xff1a; 原因&#xff1a; 换行符的原因&#xff0c;win、mac、linux/Unix 换行符是不一样的&#xff0c;提交的文件换行符和git服务器的不…

【Unity300个技巧】牛顿的学问!如何优雅地使用力?

Unity 提供了一个完备且强大物理引擎。但在刚接触的时候&#xff0c;你可能会对它与现实物理规律对应有一些疑惑。 比如&#xff1a; 现实中 1N 的力在 Unity 中怎么表现&#xff1f;Unity 中物体的质量是计算的&#xff1f;Unity 中给物体添加力的方法是 rb.AddForce()&#x…