Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >java jwt 单点登录_JWT实现单点登录

java jwt 单点登录_JWT实现单点登录

作者头像
全栈程序员站长
发布于 2022-08-31 03:42:14
发布于 2022-08-31 03:42:14
1.6K0
举报

大家好,又见面了,我是你们的朋友全栈君。

import com.atguigu.commonutils.JwtUtils;

import com.atguigu.commonutils.MD5;

import com.atguigu.eduservice.entity.UcenterMember;

import com.atguigu.eduservice.entity.vo.RegisterVo;

import com.atguigu.eduservice.mapper.UcenterMemberMapper;

import com.atguigu.eduservice.service.UcenterMemberService;

import com.atguigu.servicebase.exceptionhandler.GuliException;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

import org.apache.commons.lang.StringUtils;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.data.redis.core.RedisTemplate;

import org.springframework.stereotype.Service;

/**

*

* 会员表 服务实现类

*

*

* @author testjava

* @since 2020-06-05

*/

@Service

public class UcenterMemberServiceImpl extends ServiceImpl implements UcenterMemberService {

//注入

@Autowired

private RedisTemplate redisTemplate;

//登录的方法

@Override

public String login(UcenterMember member) {

String mobile = member.getMobile();

String password = member.getPassword();

//判断两者是否为空

if (StringUtils.isEmpty(mobile) || StringUtils.isEmpty(password)){

throw new GuliException(20001,”登录失败”);

}

//判断手机号是否正确

QueryWrapper wrapper = new QueryWrapper<>();

wrapper.eq(“mobile”,mobile);

UcenterMember mobilMenber = baseMapper.selectOne(wrapper);

//判断查出来的对象是否为空

if (mobilMenber == null){//没有这个手机号

throw new GuliException(20001,”登录失败手机号不存在”);

}

//判断对应手机号的密码是否正确

//因为存储在数据库中的密码进行了加密, 解决办法:把输入的密码进行加密,在和数据库中的密码比较

//加密方式MD5

if (!MD5.encrypt(password).equals(mobilMenber.getPassword())){

throw new GuliException(20001,”密码错误”);

}

//判断用户是否禁用

if (mobilMenber.getIsDisabled()){

throw new GuliException(20001,”用户名已被禁用”);

}

//登录成功

//生成token字符串,使用JWT做到,传查出来的对象mobilMenber

String jwtToken = JwtUtils.getJwtToken(mobilMenber.getId(), mobilMenber.getNickname());

return jwtToken;

}

//注册

@Override

public void register(RegisterVo registerVo) {

//获取注册的数据

String code = registerVo.getCode();//验证码

String mobile = registerVo.getMobile();//手机号

String nickname = registerVo.getNickname();//昵称

String password = registerVo.getPassword();//密码

//非空判断

if (StringUtils.isEmpty(code) || StringUtils.isEmpty(mobile) || StringUtils.isEmpty(nickname) || StringUtils.isEmpty(password)){

throw new GuliException(20001,”注册失败”);

}

//判断验证码是否正确,跟redis中验证吗是否一样

String rediscode = redisTemplate.opsForValue().get(mobile);

if (!code.equals(rediscode)){

throw new GuliException(20001,”注册失败”);

}

//判断手机号是否重复

QueryWrapper wrapper = new QueryWrapper<>();

wrapper.eq(“mobile”,mobile);

Integer integer = baseMapper.selectCount(wrapper);

if (integer > 0){

throw new GuliException(20001,”注册失败”);

}

//数据添加到数据库中

UcenterMember member = new UcenterMember();

member.setMobile(mobile);

member.setPassword(MD5.encrypt(password));

member.setNickname(nickname);

member.setIsDisabled(false);

member.setAvatar(“http://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eoj0hHXhgJNOTSOFsS4uZs8x1ConecaVOB8eIl115xmJZcT4oCicvia7wMEufibKtTLqiaJeanU2Lpg3w/132”);

baseMapper.insert(member);

}

@Override

public UcenterMember getOpenIdMember(String openid) {

QueryWrapper wrapper = new QueryWrapper<>();

wrapper.eq(“openid”,openid);

UcenterMember member = baseMapper.selectOne(wrapper);

return member;

}

}

三controller层

packagecom.atguigu.eduservice.controller;importcom.atguigu.commonutils.JwtUtils;importcom.atguigu.commonutils.R;importcom.atguigu.eduservice.entity.UcenterMember;importcom.atguigu.eduservice.entity.vo.RegisterVo;importcom.atguigu.eduservice.service.UcenterMemberService;importorg.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.*;importjavax.servlet.http.HttpServletRequest;/***

* 会员表 前端控制器

*

*

*@authortestjava

*@since2020-06-05*/@RestController

@RequestMapping(“/educenter/member”)

@CrossOriginpublic classUcenterMemberController {

@AutowiredprivateUcenterMemberService memberService;//登录

@PostMapping(“login”)publicR loginUser(@RequestBody UcenterMember member) {//member对象封装手机号和密码//调用service方法实现登录//返回token值,使用jwt生成

String token =memberService.login(member);return R.ok().data(“token”,token);

}//注册

@PostMapping(“register”)publicR registerUser(@RequestBody RegisterVo registerVo) {

memberService.register(registerVo);returnR.ok();

}//根据token获取用户信息

@GetMapping(“getMemberInfo”)publicR getMemberInfo(HttpServletRequest request) {//调用jwt工具类的方法。根据request对象获取头信息,返回用户id

String memberId =JwtUtils.getMemberIdByJwtToken(request);//查询数据库根据用户id获取用户信息

UcenterMember member =memberService.getById(memberId);return R.ok().data(“userInfo”,member);

}

}

四前端调用方法获得token

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/143368.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
编辑精选文章
换一批
谷粒商城-高级篇(SSO-单点登录)
参考:https://gitee.com/xuxueli0323/xxl-sso.git
OY
2022/03/20
4630
谷粒商城-高级篇(SSO-单点登录)
几种简单的登录方式的实现——前端+后端
它是在后台也就是服务端产生的一串字符串,用来给前端鉴权的一种方法,前端如果遇到很频繁的请求后台数据时,每次都需要把当前登录用户信息与数据库的比对,判断是否正确,才返回数据,这样无疑会增加服务器压力
全栈开发Dream
2021/05/20
5.6K0
几种简单的登录方式的实现——前端+后端
微服务项目:尚融宝(28)(后端搭建:实现用户登录(1))
需求 一、后端的接口 1、集成JWT service-base中添加依赖 <dependency>     <groupId>io.jsonwebtoken</groupId>     <artifactId>jjwt</artifactId> </dependency> 2、JWT工具 service-base中添加util包 添加JwtUtils类 public class JwtUtils { private static long tokenExpiration = 24*
一个风轻云淡
2022/11/15
2200
微服务项目:尚融宝(28)(后端搭建:实现用户登录(1))
【第七篇】商城系统-商品发布-SKU和SPU管理
  在新增商品的第二步我们就需要设置对应的规格参数,而这些规格参数是根据前面一步选择的三级分类来查询出来的。
用户4919348
2022/09/19
5380
【探花交友】用户登录、代码优化
参见YAPI接口地址:http://192.168.136.160:3000/project/19/interface/api/94
陶然同学
2023/02/26
6620
【探花交友】用户登录、代码优化
SpringBoot 实现用户登录,分布式Session功能
之前介绍过不少关于登录功能的代码,本文介绍一下关于分布式Session 的功能实现,
Java帮帮
2020/02/11
4.3K0
SpringBoot 实现用户登录,分布式Session功能
谷粒商城product模块实现类Attr和Brand实现类
谷粒商城product模块实现类 AttrAttrgroupRelationServiceImpl类
一个风轻云淡
2023/10/15
2410
实战:十分钟实现基于JWT前后端分离的权限框架
面试过很多Java开发,能把权限这块说的清楚的实在是不多,很多人因为公司项目职责问题,很难学到这类相关的流程和技术,本文梳理一个简单的场景,实现一个基于jwt前后端分离的权限框架。
JAVA葵花宝典
2020/07/15
1.4K0
shiro与Spring Boot 整合
框架整合 创建模块 添加依赖  <parent> <groupId>org.springframework.boot</groupId>
一个风轻云淡
2023/10/15
1800
shiro与Spring Boot 整合
微服务项目:尚融宝(41)(核心业务流程:借款额度审批)
列表的结果需要关联查询,数据字典的数据也需要展示对应的文本内容而不是值,除了定义VO的方式,我们也可以使用扩展实体类的方式 
一个风轻云淡
2022/11/15
3770
微服务项目:尚融宝(41)(核心业务流程:借款额度审批)
SpringBoot系列之使用Redis做Mybatis二级缓存
实现Cache接口,因为这个类不是Spring管理的,所以通过SpringContextHolder从ioc容器里获取redisTemplate类
SmileNicky
2022/01/04
6420
SpringBoot系列之使用Redis做Mybatis二级缓存
SpringSecurity非注解方式进行权限控制
👨‍💻个人主页: 才疏学浅的木子 🙇‍♂️ 本人也在学习阶段如若发现问题,请告知非常感谢 🙇‍♂️ 📒 本文来自专栏: Spring全家桶 🌈 每日一语:风的故乡就是我的家乡 🌈 项目搭建 搭建环境 数据库搭建(五张表) 用户表 角色表 权限表 用户-角色表 角色-权限表 创建对应的工具类 PayLoad实体 JwtUtils RsaUtils RsaKeyProperties 创建对应实体以及重写方法 创建实体 重写方法 自己编写Filter 编写登录认证过滤器 编写Token检验的Filte
才疏学浅的木子
2022/11/13
6620
SpringSecurity非注解方式进行权限控制
SpringBoot+JWT+Shiro
对于JWT和Shiro的讲解看这两篇文章,本文只讲解,最后的结合的代码。 使用shiro对数据库中的密码进行加密存储(java+springboot+shiro) SpringBoot整合JWT
GeekLiHua
2025/01/21
880
SpringBoot+JWT+Shiro
微服务项目:尚融宝(终)(核心业务流程:整合Rabbit MQ发送短信)
创建虚拟机 /srbhost,在Set permission中为新建的用户分配访问虚拟机 /srbhost 和 / 的权限
一个风轻云淡
2022/11/15
4760
微服务项目:尚融宝(终)(核心业务流程:整合Rabbit MQ发送短信)
微信扫码登录实现
第三方微信登录功能 一、准备工作 二、微信登录后端开发 2.1 添加配置 2.2 创建常量类,创建ConstantPropertiesUtil.java常量类 2.3 创建controller 2.4 测试 三、获取微信扫描人的信息 3.1 测试回调是否可用 3.2 添加依赖 3.3 添加httpclient工具类 3.4 创建回调controller方法 3.5 前端显示扫描人信息 3.6 登录之后的前端显示效果 一、准备工作 https://open.weixin.qq.com 1、注册 2、
别团等shy哥发育
2023/02/25
3.3K0
微信扫码登录实现
认证服务:注册和登录
一个风轻云淡
2023/10/15
2500
SpringSecurity-从入门到精通
​ Spring Security 是 Spring 家族中的一个安全管理框架。相比与另外一个安全框架Shiro,它提供了更丰富的功能,社区资源也比Shiro丰富。
鱼找水需要时间
2023/02/16
1.1K0
SpringSecurity-从入门到精通
『高级篇』docker之开发用户服务EdgeService(13)
PS:其实通过梳理发现这个还是有套路可寻的如何多语言进行通信,先生成对应的语言的代码,然后通过rpc的服务端和客户端,他们之前进行协议话的通信,服务端完成自身的业务逻辑,客户端就获取返回的结果。
IT架构圈
2018/10/18
4160
认证服务:验证码保存和注册
一个风轻云淡
2023/10/15
2350
深入浅出,JWT单点登录实例+原理
关于ThreadLocal技术这里不做展开。主要就是通过当前线程对象去线程集合中获取到该线程下保存的变量,解决多线程下的数据覆盖问题。
全栈程序员站长
2022/08/31
1.1K0
深入浅出,JWT单点登录实例+原理
相关推荐
谷粒商城-高级篇(SSO-单点登录)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档