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

java jwt 单点登录_JWT实现单点登录importcom.atguigu.commonutils.JwtUtils;importcom.atguigu.commonutils.MD5;importcom.atguigu.eduservice.entity.UcenterMember;importcom.atguigu.eduservice.entity.vo.RegisterVo;importcom.atguigu.edus…

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

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.net/143368.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 新手安卓开发详细教程视频_安卓手机解锁激活成功教程教程

    新手安卓开发详细教程视频_安卓手机解锁激活成功教程教程安卓一、安卓工程构建及第一个安卓程序运行一、安卓工程构建及第一个安卓程序运行使用的软件-eclipse(ADT)在PackageExplorer栏右键点击,New→AndroidApplicationProjectApplicationName:在安装到手机上时应用程序显示的名字(例如微信,QQ)ProjectName:在PackageExplorer栏里面显示的工程名字PackageName:包名(包名不能带有中文,会构建失败),大部分都是公司域名的倒

    2025年5月30日
    0
  • pod Evicted的状态究竟是何人所为

    pod Evicted的状态究竟是何人所为微信公众号:运维开发故事,作者:姜总背景今天发现好多pod的状态都是Evicted,然后我没有监控的权限,本来想看看grafana上监控图是否出现了特殊情况,无奈没权限看。因为我发现pod出现大量的Evicted状态的时候,查看pod所在的node节点,距离当时发生Evicted的时间已经是7小时之久了。因此可能会存在一种原因:发生了Evicted的时候的确磁盘已经超过默认的kubelet的资源预留参数了。但是问题发生后,触发了阈值,已经回收了磁盘空间,导致我看的时候磁盘空间已经恢复。在每个K.

    2022年5月13日
    24
  • 车载逆变器设计[通俗易懂]

    车载逆变器设计[通俗易懂]逆变器,别称为变流器、反流器,是一种可将直流电转换为交流电的器件,由逆变桥、逻辑控制、滤波电路三大部分组成,主要包括输入接口、电压启动回路、MOS开关管、PWM控制器、直流变换回路、反馈回路、LC振荡及输出回路、负载等部分,可分为半桥逆变器、全桥逆变器等。目前已广泛适用于空调、家庭影院、电脑、电视、抽油烟机、风扇、照明、录像机等设备中  逆变变压器原理  它的工作原理流

    2022年6月8日
    34
  • 统计推断——假设检验——方差分析之多重比较(LSD法、Sidak法、Bonferroni法、Dunnett法、Tukey法、SNK 法、Duncan法)「建议收藏」

    统计推断——假设检验——方差分析之多重比较(LSD法、Sidak法、Bonferroni法、Dunnett法、Tukey法、SNK 法、Duncan法)「建议收藏」在一个试验中,有个处理平均数间比较时,其全部可能的相互比较对数有个,这种比较是复式比较,亦称多重比较(multiplecomparisons)。为什么要做多重比较呢?方差分析后做多重比较有很多好处:误差由多个处理内的变异合并估计,自由度增大了,因而比较的精确度也增大了。 检验显著,说明可以判定多个处理间存在显著的变异。因此方差分析后再做多重比较,称为Fisher氏保护性多重比较(F…

    2022年6月14日
    298
  • Java中如何输入一个数组「建议收藏」

    Java中如何输入一个数组「建议收藏」第一种方法:(不限制输入数组的长度)System.out.println(“请输入几个数并用逗号隔开:”);Scannersc=newScanner(System.in);Stringstr=sc.next().toString();String[]arr=str.split(“,”);int[]b=newint[arr.length];for(intj=0;j<b.length;j++){b[j]=Integ

    2022年6月26日
    143
  • 《Linux Device Drivers》 第十七章 网络驱动程序——note

    《Linux Device Drivers》 第十七章 网络驱动程序——note

    2022年1月1日
    55

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号