一张流程图带你学会SpringBoot结合JWT实现登录功能

这篇具有很好参考价值的文章主要介绍了一张流程图带你学会SpringBoot结合JWT实现登录功能。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🧑‍💻作者名称:DaenCode
🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。
😎人生感悟:尝尽人生百味,方知世间冷暖。
📖所属专栏:SpringBoot实战


一张流程图带你学会SpringBoot结合JWT实现登录功能,SpringBoot实战,流程图,spring boot,oracle


登录流程图

一张流程图带你学会SpringBoot结合JWT实现登录功能,SpringBoot实战,流程图,spring boot,oracle

🌟数据准备

数据库创建

一张流程图带你学会SpringBoot结合JWT实现登录功能,SpringBoot实战,流程图,spring boot,oracle

数据库表创建

一张流程图带你学会SpringBoot结合JWT实现登录功能,SpringBoot实战,流程图,spring boot,oracle

相关SQL语句

/*
 Navicat Premium Data Transfer
 Source Server         : localhost
 Source Server Type    : MySQL
 Source Server Version : 50709
 Source Host           : localhost:3306
 Source Schema         : demo
 Target Server Type    : MySQL
 Target Server Version : 50709
 File Encoding         : 65001
 Date: 04/08/2023 11:05:33
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for sys_user
-- ----------------------------
DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE `sys_user`  (
  `id` int(50) NOT NULL AUTO_INCREMENT,
  `user_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `user_password` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_user
-- ----------------------------
INSERT INTO `sys_user` VALUES (1, 'daencode', '123456');
INSERT INTO `sys_user` VALUES (2, '隔壁老王', '123456');
INSERT INTO `sys_user` VALUES (3, '太监小李', '123456');
SET FOREIGN_KEY_CHECKS = 1;

🌟JWT介绍

基本概念

JWT(JsonWebToken)是一种轻量级的跨域身份验证解决方案。通常被用于无状态身份验证机制,将用户信息签名打包进行传输。

结构

组成结构:header.payload.signature

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
  • header:头部。包含了算法类型和令牌类型两部分内容。
    一张流程图带你学会SpringBoot结合JWT实现登录功能,SpringBoot实战,流程图,spring boot,oracle

  • payload:载荷或者称之为Claims声明。包含用户或者其他实体的信息。其中的数据结构以Key-Value形式存在。通常分为以下3个类别:
    一张流程图带你学会SpringBoot结合JWT实现登录功能,SpringBoot实战,流程图,spring boot,oracle

    • 注册声明:预定义信息。如iss(签发者)、exp(过期时间)、sub(主题)等。
    • 公共声明:根据需要自定义的字段,例如用户 ID、角色、权限等。
    • 私有声明:自定义的私有字段,用于双方约定的额外信息。
  • signature:签名。将头部和载荷进行签名,确保数据的完整性和防止篡改。签名需要使用头部中指定的算法和密钥进行计算。其中的your-256-bit-secret为私钥。
    一张流程图带你学会SpringBoot结合JWT实现登录功能,SpringBoot实战,流程图,spring boot,oracle
    注意:因header和payload部分为base64编码解码,并不是安全的,所以payload中不能放敏感信息。

🌟具体实现

引入相关依赖

引入项目所需要的依赖。

		<!-- JWT相关 -->
		<dependency>
			<groupId>io.jsonwebtoken</groupId>
			<artifactId>jjwt</artifactId>
			<version>0.7.0</version>
		</dependency>

配置文件

注意修改数据库用户名、密码以及url中的数据库名称。

#数据库配置
server.port=8080
spring.datasource.password=个人数据库密码
spring.datasource.username=个人数据库用户名
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/demo?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2b8
#开启控制台打印sql
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
#mybatis下划线转驼峰配置
mybatis.configuration.map-underscore-to-camel-case=true
#配置mapper文件扫描
mybatis.mapper-locations=classpath:mapper/*.xml

用户实体类

这里为了节省篇幅。省略了getter、setter方法,请自行生成。

public class User {
    private Integer id;
    private String userName;
    private String password;
   //省略了getter、setter方法
}

登录请求类

将用户登录的参数单独封装成请求类。

public class UserLogin {
    private String username;
    private String password;
    //省略了getter、setter方法
}

Token生成校验工具类

生成Token时通过Jwts.builder来构建jwttoken中的信息,包含主题、用户信息、颁发时间以及签名算法等信息。
校验Token时通过解析出声明来取出相关用户信息。

public class TokenUtils {
    //过期时间
    private static final long EXPIRE_TIME=60000*60*24*7;
    //秘钥
    private static final String PRI_SECRET="daencode";
    //主体
    private static final String SUBJECT="daencode";
    //token生成
    public static String genToken(User user){
        String token=Jwts.builder()
                .setSubject(SUBJECT)//主题
                .claim("username",user.getUserName())
                .claim("id",user.getId())//用户名、id,还可以放其他多个信息。不要放敏感信息
                .setIssuedAt(new Date())//颁发日期
                .setExpiration(new Date(System.currentTimeMillis()+EXPIRE_TIME))
                .signWith(SignatureAlgorithm.HS256,PRI_SECRET)
                .compact();
        return token;
    }
    //token验证
    public static Claims verifyToken(String token){
        try {
            //从token中解析出claims
            Claims claims=Jwts.parser().setSigningKey(PRI_SECRET).parseClaimsJws(token).getBody();
            return claims;
        } catch (ExpiredJwtException e) {
            throw new RuntimeException(e);
        } catch (UnsupportedJwtException e) {
            throw new RuntimeException(e);
        } catch (MalformedJwtException e) {
            throw new RuntimeException(e);
        } catch (SignatureException e) {
            throw new RuntimeException(e);
        } catch (IllegalArgumentException e) {
            throw new RuntimeException(e);
        }
    }
}

Controller

如果用户登录成功,则返回token。

@Autowired
    private UserService userService;
    @PostMapping("login")
    public JsonData login(@RequestBody UserLogin userLogin){
        //token为空则返回失败,否则返回成功
        String token=userService.login(userLogin);
        return token==null?JsonData.buildError("登录失败"):JsonData.buildSuccess(token);
    }

UserServiceImpl

如果能从数据库查询到当前用户,则使用token工具类根据当前用户生成token。

 @Autowired
    private UserMapper userMapper;
    @Override
    public String login(UserLogin userLogin) {
        User user=userMapper.login(userLogin);
        if (user==null){
            return null;
        }else {
            return TokenUtils.genToken(user);
        }
    }

UserMapper

public interface UserMapper {
    User login(@Param("userLogin") UserLogin userLogin);
}

UserMapper.xml

<select id="login" parameterType="com.shoanjen.redis.model.UserLogin" resultType="com.shoanjen.redis.model.User">
select * from sys_user where user_name=#{userLogin.username} and user_password=#{userLogin.password}
</select>

🌟测试

一张流程图带你学会SpringBoot结合JWT实现登录功能,SpringBoot实战,流程图,spring boot,oracle

🌟写在最后

有关于SpringBoot结合Jwt实现登录功能的内容到这里就结束了。非常感谢大家的观看,如有疑问可在评论区留言。另外,大家都知道哪些登录方案呢?欢迎大家积极讨论!


一张流程图带你学会SpringBoot结合JWT实现登录功能,SpringBoot实战,流程图,spring boot,oracle文章来源地址https://www.toymoban.com/news/detail-676051.html

到了这里,关于一张流程图带你学会SpringBoot结合JWT实现登录功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一张思维导图带你学会使用SpringBoot中的Schedule定时发送邮件

    🧑‍💻作者名称:DaenCode 🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。 😎人生感悟:尝尽人生百味,方知世间冷暖。 📖所属专栏:SpringBoot实战 标题 一文带你学会使用SpringBoot+Avue实现短信通知功能(含重要文件代码) 一张思维导图带你学会Springboot创

    2024年02月14日
    浏览(89)
  • 一张思维导图带你学会SpringBoot、Vue前后端分离项目线上部署

    🧑‍💻作者名称:DaenCode 🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。 😎人生感悟:尝尽人生百味,方知世间冷暖。 📖所属专栏:SpringBoot实战 日常开发项目上线或者部署个人博客网站,都离不开线上服务器部署应用。本文带你学会线上部署应用。

    2024年02月14日
    浏览(61)
  • 一张思维导图带你打通SpringBoot自定义拦截器的思路

    🧑‍💻作者名称:DaenCode 🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。 😎人生感悟:尝尽人生百味,方知世间冷暖。 📖所属专栏:SpringBoot实战 在开发中,都离不开拦截器的使用。比如说在开发登录功能时,采用JWT登录时通过对token进行验证实现登

    2024年02月14日
    浏览(51)
  • 3-3. SpringBoot项目集成【用户身份认证】实战 【全流程篇】基于JWT+双重检查的登录+登出+拦截器

    书接上文 实战核心篇,我们已经 把JWT的核心代码实现了! 文中不止是代码实现,更是使用到了设计原则,提升大家的内功心法。并且抛转引玉的实现了RSA和HMAC两种算法,还没看过的同学,建议先看上文。所以对于 基于JWT的Token用户身份认证机制 来说,剩下的就是与接口结

    2023年04月16日
    浏览(49)
  • Springboot实现简单JWT登录鉴权

    登录需要鉴权是为了保护系统的安全性和用户的隐私。在一个 Web 应用中,用户需要提供一定的身份信息(例如用户名和密码)进行登录,登录后系统会为用户生成一个身份令牌(例如 JWT Token)来标识用户的身份。 鉴权的主要目的是确保只有经过身份验证的用户才能访问系统

    2024年02月13日
    浏览(32)
  • SpringBoot+JWT实现单点登录解决方案

    一、什么是单点登录? 单点登录是一种统一认证和授权机制,指在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的系统,不需要重新登录验证。 单点登录一般用于互相授信的系统,实现单一位置登录,其他信任的应用直接免登录的方式,在多个应用系统中,

    2024年02月12日
    浏览(44)
  • springBoot JWT实现websocket的token登录拦截认证

    功能:所有关于websocket的请求必须登录,实现websocket需要登录后才可使用,不登录不能建立连接。 后台spring security配置添加websocket的请求可以匿名访问,关于websocket的请求不要认证就可以随意访问,去除匿名访问后,前端在与websocket建立链接无法在请求头里直接加入Authoriz

    2024年02月13日
    浏览(49)
  • 【SpringBoot】集成SpringSecurity+JWT实现多服务单点登录,原来这么easy

    Spring Boot+Spring Security+JWT实现单点登录 介绍: 单点登录(SingleSignOn,SSO) ,当用户在身份 认证服务器 上登录一次以后,即可 获得访问单点登录系统中其他关联系统和应用软件的权限 ,同时这种实现是不需要管理员对用户的登录状态或其他信息进行修改的,这意味着在多个应用

    2024年02月02日
    浏览(47)
  • SpringBoot整合Mybatis-Plus、Jwt实现登录token设置

    Spring Boot整合Mybatis-plus实现登录常常需要使用JWT来生成用户的token并设置用户权限的拦截器。本文将为您介绍JWT的核心讲解、示例代码和使用规范,以及如何实现token的生成和拦截器的使用。 一、JWT的核心讲解 JWT(JSON Web Token)是一种基于JSON的,用于在网络上安全传输信息的

    2024年02月02日
    浏览(69)
  • go使用gin结合jwt做登录功能

    2024年02月16日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包