登录功能存入Redis功能

第一步  先导入依赖 需要 redis 和 jwt  的依赖  还有JwtUtils的工具类

<!--jwt依赖-->
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt</artifactId>
    <version>0.9.1</version>
</dependency>

package com.wx.utils;

import cn.hutool.json.JSONUtil;
import com.alibaba.druid.util.StringUtils;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jws;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;
import java.util.Date;

@Component
public class JwtUtils {
    /**
     * 秘钥
     */
    public static final String SECRET = "zjKkye4PN59B2wriTjtVCo3BOYoD1B";
    /**
     * 过期时间24小时
     */
    public static final long EXPIRE = 1000 * 60 * 60 * 24;


    @Autowired
    private HttpServletRequest request;
    /**
     * 通过payload创建令牌
     *
     * @param payload 令牌里携带的信息
     * @return token令牌
     */
    public  String createToken(Object payload) {
        String jwtToken = Jwts.builder()
                .setHeaderParam("typ", "JWT")// 类型
                .setHeaderParam("alg", "HS256") // 算法名
                .setIssuedAt(new Date()) // 签发时间
                .setExpiration(new Date(System.currentTimeMillis() + EXPIRE))// 过期时间
                .claim("payload", JSONUtil.toJsonStr(payload))
                .signWith(SignatureAlgorithm.HS256, SECRET)
                .compact();
        return jwtToken;
    }

    /**
     * 效验token
     *
     * @param jwtToken
     * @return
     */
    public  boolean validToken(String jwtToken) {
        if (StringUtils.isEmpty(jwtToken)) {
            return false;
        }
        try {
            Jwts.parser().setSigningKey(SECRET).parseClaimsJws(jwtToken);
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

    /**
     * 解析token
     *
     * @param headerName
     * @return
     */
    public  <T> T parseToken(String headerName, Class<T> clazz) {
        String token = request.getHeader(headerName);

        if (StringUtils.isEmpty(token)) {
            return null;
        }
        try {
            Jws<Claims> claimsJws = Jwts.parser().setSigningKey(SECRET).parseClaimsJws(token);
            Claims claims = claimsJws.getBody();
            Object payload = claims.get("payload");
            return JSONUtil.toBean(JSONUtil.parseObj(payload), clazz);
        } catch (Exception e) {
            return null;
        }
    }
}
 

第二步 创建 数据库 简简单单 的登录    工作流 需要价格type 类型

 

 

第三步去controller 类里编写代码    使用map写的登录

@RequestMapping("login")
public Map<String , Object> login(@RequestBody User user){
    Map<String ,Object> map=new HashMap<>();
    QueryWrapper<User> queryWrapper=new QueryWrapper<>();
    queryWrapper.eq("name",user.getName());
    User loginUser = userService.getOne(queryWrapper);
    if(loginUser==null){
        map.put("state",-1);
        map.put("msg","用户名不正确");
        return map;
    }
    if(!loginUser.getPwd().equals(user.getPwd())){
        map.put("state",-1);
        map.put("msg","密码不正确");
        return map;
    }

    String token = jwtUtils.createToken(loginUser);
    redisTemplate.opsForValue().setIfAbsent("token",token);
    map.put("state",0);
    map.put("msg","登录成功");
    map.put("token",token);
    map.put("user",loginUser);
    return map;
}

第四步  去前端调用接口 即可

<template>

<div>
<el-form :model="formInline" class="demo-form-inline">

  <el-form-item label="用户名">
    <el-input v-model="formInline.name" placeholder="用户名"></el-input>
  </el-form-item>
  <el-form-item label="密码">
    <el-input type="password" v-model="formInline.pwd" placeholder="密码"></el-input>
  </el-form-item>

  <el-form-item>
    <el-button type="primary" @click="onSubmit">登录</el-button>
  </el-form-item>
</el-form>
</div>
</template>

<script>
export default {
  name: "LoginView",
  data(){
    return {
      formInline:{}
    }
  },methods:{
    onSubmit(){
      this.axios.post("http://localhost:8083/user/login",this.formInline).then(res=>{
        if(res.data.state==0){
          this.$message.success(res.data.msg)

          sessionStorage.setItem("token",res.data.token)


          sessionStorage.setItem("user",JSON.stringify(res.data.user))

          console.log(res.data.user)
         this.$router.push("/list")
        }else{
          this.$message.error(res.data.msg)
        }
      })
    }
  },created() {

  }
}
</script>

<style scoped>

</style>

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值