springboot实现Jwt登录认证

JwtUtils工具类:

public class JwtUtils {
    /*
    过期时间为24小时,毫秒计时的---毫秒--》秒--》分--》小时--》天
     */
    private static final long EXPIRE_TIME= 60 * 24 * 60 * 1000;
    /**
     * 密钥,注意这里如果真实用到,应当设置到复杂点,相当于私钥的存在。如果被人拿到,相当于它可以自己制造token了。
     */
    private static final String TOKEN_SECRET="token-xly";  //密钥盐
    /**
     * 签名生成
     * @param user
     * @return
     */
    public static String sign(UserInfo user){
        String token = null;
        try {
            Date expiresAt = new Date(System.currentTimeMillis() + EXPIRE_TIME);
            token = JWT.create()
                    .withIssuer("xu")//自定义的
                    .withClaim("username", user.getPhone())
                    .withExpiresAt(expiresAt)
                    // 使用了HMAC256加密算法。
                    .sign(Algorithm.HMAC256(TOKEN_SECRET));
        } catch (Exception e){
            e.printStackTrace();
        }
        return token;
    }
    /**
     * 签名验证
     * @param token
     * @return
     */
    public static boolean verify(String token){
        try {
            JWTVerifier verifier = JWT.require(Algorithm.HMAC256(TOKEN_SECRET)).withIssuer("xu").build();//自定义的
            DecodedJWT jwt = verifier.verify(token);
            System.out.println("认证通过:");
            System.out.println("issuer: " + jwt.getIssuer());
            System.out.println("username: " + jwt.getClaim("username").asString());
            System.out.println("过期时间:" + jwt.getExpiresAt());
            return true;
        } catch (Exception e){
            return false;
        }
    }
}

UserInfoMapper.xml:(登录验证主要用到findInfo,findLogin)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.needs.mapper.UserInfoMapper">
    <resultMap id="MessageTextResult" type="com.example.needs.entity.UserInfo" >
        <result property="id" column="id"       />
        <result property="phone"  column="phone"    />
        <result property="password"   column="password"    />
        <result property="photo" column="photo"/>
        <result property="name" column="name"/>
        <result property="status" column="status"/>
        <result property="email" column="email"/>
        <result property="pwdKey" column="pwd_key"/>
        <result property="createTime" column="create_time"/>
    </resultMap>
    <!--验证通过用户信息添加进表-->
    <insert id="yzUc" useGeneratedKeys="true" keyProperty="id">
        INSERT INTO user_info (phone,`password`,photo,`name`,`status`,email,pwd_key,create_time) VALUES (#{phone},#{password},#{photo},#{name},#{status},#{email},#{pwdKey},#{createTime});
    </insert>

    <!--查询用户表全部信息-->
    <select id="findInfo" resultMap="MessageTextResult">
        select * from user_info where phone=#{phone};
    </select>
	<!--修改头像-->
    <update id="updPhoto">
        UPDATE user_info SET photo=#{photo} WHERE phone=#{phone};
    </update>
    <!--修改密码-->
    <update id="updPasswd">
        update user_info set password=#{password},pwd_key=#{pwdKey} where phone=#{phone};
    </update>
    <!--修改邮箱-->
    <update id="updEmail">
        update user_info set email=#{email} where phone=#{phone};
    </update>
    <!--根据emali查询信息-->
    <select id="findByEmail" resultMap="MessageTextResult">
        SELECT * FROM user_info WHERE email=#{email};
    </select>
    <!--登录查询-->
    <select id="findLogin" resultType="boolean">
        select * from user_info where phone=#{phone} and password=#{password};
    </select>
</mapper>

UserInfoMapper:(登录验证主要用到findInfo,findLogin)

@Mapper
public interface UserInfoMapper {
    /**
     * 验证输入数据库
     * @param userInfo phone,password,photo,name,status,email,pwd_key,create_time
     * @return
     */
    int yzUc(UserInfo userInfo);

    /**
     * 根据手机号查询用户表信息
     * @param userInfo
     * @return
     */
    UserInfo findInfo(UserInfo userInfo);

    /**
     * 修改头像
     * @param userInfo
     * @return
     */
    Integer updPhoto(UserInfo userInfo);

    /**
     * 修改密码
     * @param userInfo
     * @return
     */
    Integer updPasswd(UserInfo userInfo);

    /**
     * 修改邮箱
     * @param userInfo
     * @return
     */
    Integer updEmail(UserInfo userInfo);

    /**
     * 根据邮箱查询
     * @param userInfo
     * @return
     */
    UserInfo findByEmail(UserInfo userInfo);

    /**
     * 登录查询
     * @param userInfo
     * @return
     */
    Boolean findLogin(UserInfo userInfo);
}

UserInfoServiceImpl:

    /**
     * 根据手机号查询信息
     *
     * @param userInfo
     * @return
     */
    @Override
    public UserInfo findInfo(UserInfo userInfo) {
        return userInfoMapper.findInfo(userInfo);
    }

    /**
     * JwtUtils,token登录认证
     * @param userInfo
     * @return
     */
    @Override
    public Map<String, Object> findLogin(UserInfo userInfo) {
        Map<String, Object> map = new HashMap<>();
        if (userInfo.getPassword()==null||userInfo.getPhone()==null) {         //如果输入手机号或密码为空,抛出异常
            throw new NullPointerException("用户名或密码为空");
        }
        UserInfo userInfo1 = userInfoMapper.findInfo(userInfo);               //实例化userInfo1,根据userInfo中的手机号查询出来数据库中对应的pwdKey盐
        String passwd = Md5Util.getHMAC(userInfo.getPassword(), userInfo1.getPwdKey()); //获取输入的密码,与该信息数据库总对应的盐组合,进行getHMAC加密
        userInfo.setPassword(passwd);     //将加密后的密码,替换掉输入的未加密的密码
        if (userInfoMapper.findLogin(userInfo)) {   //findLogin根据手机号和密码查询数据库中的信息,能查到为true,反之为false
            String token = JwtUtils.sign(userInfo);  //通过验证之后给他一个token,工具类中定义过的工具类方法,直接拿来调用。
            if (token != null) {                   //验证token如果token不为空,继续执行
                map.put("code:", 200);
                map.put("message:", "认证成功");
                map.put("token:", token);
                System.out.println(map);
                return map;
            }
            }

        map.put("code:", 500);
        map.put("message:", "认证失败");
        return map;


    }

UserInfoService:

  /**
     * 更加姓名查询用户信息(登录)
     * @param userInfo
     * @return
     */
    UserInfo findInfo(UserInfo userInfo);
        /**
     * 登录查询
     * @param userInfo
     * @return
     */
    Map<String,Object> findLogin(UserInfo userInfo);

UserInfoController:

    /**
     * 根据手机号查询信息
     * @param userInfo phone;
     * @return
     */
    @RequestMapping("/findInfo")
    public UserInfo findInfo(@RequestBody UserInfo userInfo){
        return userInfoService.findInfo(userInfo);
    }
     /**
     * 登录验证
     * @param userInfo
     * @return
     */
      @RequestMapping("/findLogin")
    public Map<String,Object> findLogin(@RequestBody UserInfo userInfo){
        return userInfoService.findLogin(userInfo);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值