zoukankan      html  css  js  c++  java
  • jwt认证登录

    配置文件:#服务配置
    server:
      port: 9002
    #spring配置
    spring:
      #应用配置
      application:
        name: ynhrm-system #指定服务名
      #数据库连接池
      datasource:
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://localhost:3306/ynhrm?useUnicode=true&characterEncoding=utf8
        username: root
        password: 123456
      #jpa
      jpa:
        database: MySQL
        show-sql: true
        open-in-view: true
    jwt: config: key: zcc-ynhrm ttl: 3600000
    第一步:JWT工具类
    
    package com.ynhrm.common.utils;

    import io.jsonwebtoken.Claims;
    import io.jsonwebtoken.JwtBuilder;
    import io.jsonwebtoken.Jwts;
    import io.jsonwebtoken.SignatureAlgorithm;
    import lombok.Data;
    import lombok.Getter;
    import lombok.Setter;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;

    import java.util.Date;
    import java.util.Map;



    @Component
    @ConfigurationProperties("jwt.config")
    @Data
    public class JWTUtils {
    private String key;//签名私钥
    private Long ttl;//签名失效时间
    /* private String key="zcc-ynhrm";
    private int ttl=3600000;*/

    /**
    * 设置认证token
    * 参数:
    * id:登陆用户id
    * subject(主题):登陆用户名
    */
    public String createJWT(String id, String subject, Map<String,Object> map){
    //1.设置失效时间
    long now=System.currentTimeMillis();//当前毫秒数
    long exp=now+ttl;
    //2.创建jwtBuilder
    JwtBuilder jwtBuilder = Jwts.builder().setId(id).setSubject(subject)
    .setIssuedAt(new Date())
    .signWith(SignatureAlgorithm.HS256, key);
    //3.通过map设置claims,指定失效时间
    jwtBuilder.setClaims(map);
    jwtBuilder.setExpiration(new Date(exp));
    //4.创建token
    String token = jwtBuilder.compact();
    return token;
    }

    /**
    * 解析token字符串获取clamis
    */

    public Claims parseJWT(String token){
    Claims claims = Jwts.parser().setSigningKey(key).parseClaimsJws(token).getBody();
    return claims;
    }
    }
    第二步:controller层,service,dao自己写
    /**
     * 登陆
     * 根据mobile查询用户
     * 比较password
     * 生成token
     * @return
     */
    @RequestMapping(value = "/login",method = RequestMethod.POST)
    public Result login(@RequestBody Map<String,String>loginMap){//因请求参数在请求体中
        String mobile = loginMap.get("mobile");
        String password = loginMap.get("password");
        User user = userService.findUserByMobile(mobile);
        if (user==null||!user.getPassword().equals(password)){
            return new Result(ResultCode.MOBILEORPASSWORDERROR);
        }else {
            Map<String,Object> map=new HashMap<>();
            map.put("companyId",user.getCompanyId());
            map.put("companyName",user.getCompanyName());
            String token = jwtUtils.createJWT(user.getId(), user.getUsername(), map);
            return new Result(ResultCode.SUCCESS, token);//登录成功把token返回
        }
    }

    测试

    @Component
  • 相关阅读:
    奥展项目笔记12-批量下载文件
    深度学习笔记03-梯度下降和方向传播
    深度学习笔记02-高效计算基础(python)
    深度学习笔记01-数学基础
    解决Android Studio卡在Gradle:Resolve dependecies 'app:_debugCompile'问题
    Oracle DB , 计算各个用户/schema 的磁盘占用空间
    转载:删除github上文件夹的两种方式
    Win7无法保存共享帐户密码
    怎么做网线,网线水晶头接法和线序
    QQ Protect 的删除
  • 原文地址:https://www.cnblogs.com/yscec/p/11903621.html
Copyright © 2011-2022 走看看