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

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

🌟具体实现


引入相关依赖


引入项目所需要的依赖。

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


目录
相关文章
|
2月前
|
SQL Java 测试技术
在Spring boot中 使用JWT和过滤器实现登录认证
在Spring boot中 使用JWT和过滤器实现登录认证
130 0
|
2月前
【Azure APIM】在APIM中实现JWT验证不通过时跳转到Azure登录页面
【Azure APIM】在APIM中实现JWT验证不通过时跳转到Azure登录页面
|
2月前
|
NoSQL 关系型数据库 MySQL
SpringBoot 集成 SpringSecurity + MySQL + JWT 附源码,废话不多直接盘
SpringBoot 集成 SpringSecurity + MySQL + JWT 附源码,废话不多直接盘
93 2
|
2月前
|
SQL Java 数据库连接
springboot+mybatis+shiro项目中使用shiro实现登录用户的权限验证。权限表、角色表、用户表。从不同的表中收集用户的权限、
这篇文章介绍了在Spring Boot + MyBatis + Shiro项目中,如何使用Shiro框架实现登录用户的权限验证,包括用户、角色和权限表的设计,以及通过多个表查询来收集和验证用户权限的方法和代码实现。
springboot+mybatis+shiro项目中使用shiro实现登录用户的权限验证。权限表、角色表、用户表。从不同的表中收集用户的权限、
|
2月前
|
NoSQL 安全 Java
Java Spring Boot中使用Shiro、JWT和Redis实现用户登录鉴权
Java Spring Boot中使用Shiro、JWT和Redis实现用户登录鉴权
|
9天前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的服装商城管理系统
基于Java+Springboot+Vue开发的服装商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的服装商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
31 2
基于Java+Springboot+Vue开发的服装商城管理系统
|
9天前
|
前端开发 JavaScript Java
SpringBoot项目部署打包好的React、Vue项目刷新报错404
本文讨论了在SpringBoot项目中部署React或Vue打包好的前端项目时,刷新页面导致404错误的问题,并提供了两种解决方案:一是在SpringBoot启动类中配置错误页面重定向到index.html,二是将前端路由改为hash模式以避免刷新问题。
49 1
|
6天前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的大学竞赛报名管理系统
基于Java+Springboot+Vue开发的大学竞赛报名管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的大学竞赛报名管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
20 3
基于Java+Springboot+Vue开发的大学竞赛报名管理系统
|
7天前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的蛋糕商城管理系统
基于Java+Springboot+Vue开发的蛋糕商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的蛋糕商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
20 3
基于Java+Springboot+Vue开发的蛋糕商城管理系统
下一篇
无影云桌面