首页 > 编程知识 正文

单点登录 jwt,前端单点登录如何实现

时间:2023-05-04 11:07:00 阅读:132254 作者:3046

import com.atguigu.common utils.jwt utils;

import com.atguigu.common utils.MD5;

import com.atguigu.edu service.entity.ucentermember;

import com.atguigu.edu service.entity.VO.register VO;

import com.atguigu.edu service.mapper.ucentermembermapper;

import com.atguigu.edu service.service.ucentermemberservice;

import com.atguigu.service base.exception handler.guli exception;

import com.Bao midou.mybatisplus.core.conditions.query.query wrapper;

import com.Bao midou.mybatisplus.extension.service.impl.service impl;

importorg.Apache.com mons.lang.string utils;

importorg.spring framework.beans.factory.annotation.auto wired;

importorg.spring framework.data.redis.core.redis template;

importorg.spring framework.stereotype.service;

//*

*

*员额表服务实现班

*

*

* @author testjava

* @since 2020-06-05

*/

@Service

publicclassucentermemberserviceimplextendsserviceimplimplementsucentermemberservice {

//注入

@Autowired

私有身份验证模板;

//登录的方法

@Override

公共字符串登录in (用户中心成员成员成员) {

String mobile=member.getMobile (;

string password=member.get password (;

//判断两者是否为空

if(stringutils.isempty(mobile ) ) )

thrownewGuliexception(20001,“登录失败”);

}

//判断手机号码是否正确

querywrapperwrapper=newquerywrapper (;

wapper.eq('mobile ',mobile );

ucentermembermobilmenber=base mapper.selectone (wrapper;

//判断调查的对象是否为空

if (移动成员==null ) (/没有这个手机号码

thrownewGuliexception(20001,“不存在登录失败的手机号码”

}

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

//数据库中存储的密码已加密,解决方案:加密输入的密码并将其与数据库中的密码进行比较

//加密方式MD5

if (! MD5.encrypt(password ).equals (Mobil menber.get password ) ) }{

thrownewGuliexception(20001,"密码错误"

}

//判断用户是否无效

if(mobilmenber.getisdisabled () ) }

thrownewGuliexception(20001,“用户名无效”);

}

//登录成功

生成token字符串,使用JWT执行此操作,然后传递出现的对象mobilMenber

stringjwttoken=jwt utils.getjwttoken (Mobil menber.getid (,mobilMenber.getNickname ) );

返回jwt令牌;

}

//注册

@Override

publ

ic 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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。