Java 整合JWT

1.1为什么学习JWT(引入)

        微服务集群中的每个服务,对外提供的都是Rest风格的接口,而Rest风格的一个最重要的规范就是:服务的无状态性

  • 需要解决问题:服务与服务之间可以确定用户的登录状态,甚至可以确定登录用户信息。
  • 解决方案:使用令牌

1.2 什么是JWT 

        JWT,全称是JSON Web Token,是JSON风格轻量级的授权和身份认证规范,可实现无状态、分布式的Web应用授权;官网:https://jwt.io

  • Token需要加密,进行保护,采用RSA加密

1.3 使用RSA工具

  • 生成公钥和私钥

1.3.1搭建环境

1)父项目(pom文件)

<jwt.jjwt.version>0.9.0</jwt.jjwt.version>
<jwt.joda.version>2.9.7</jwt.joda.version>
<beanutils.version>1.9.3</beanutils.version>


<!--jwt-->
<!--JavaBean工具类,用于JavaBean数据封装-->
<dependency>
    <groupId>commons-beanutils</groupId>
    <artifactId>commons-beanutils</artifactId>
    <version>${beanutils.version}</version>
</dependency>
<!--jwt工具-->
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt</artifactId>
    <version>${jwt.jjwt.version}</version>
</dependency>
<!--joda 时间工具类 -->
<dependency>
    <groupId>joda-time</groupId>
    <artifactId>joda-time</artifactId>
    <version>${jwt.joda.version}</version>
</dependency>

2)网关(pom文件)

 <!--jwt-->
        <!--JavaBean工具类,用于JavaBean数据封装-->
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
        </dependency>
        <!--jwt工具-->
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
        </dependency>
        <!--joda 时间工具类 -->
        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
        </dependency>

1.3.2拷贝工具

1.3.3 测试

public class TestRSA {

    private static final String pubKeyPath = "D:\\rsa\\rsa.pub";

    private static final String priKeyPath = "D:\\rsa\\rsa.pri";


    @Test
    public void testGenerate() throws Exception {
        RsaUtils.generateKey(pubKeyPath, priKeyPath, "1234");
    }

    @Test
    public void testGet() throws Exception {
        PublicKey publicKey = RsaUtils.getPublicKey(pubKeyPath);
        System.out.println(publicKey);

        PrivateKey privateKey = RsaUtils.getPrivateKey(priKeyPath);
        System.out.println(privateKey);
    }


}

1.4 使用JWT工具

  • 生成Token
  • 解析Token
public class TestJwt {

    private static final String pubKeyPath = "D:\\rsa\\rsa.pub";

    private static final String priKeyPath = "D:\\rsa\\rsa.pri";

    @Test
    public void testCreateToken() throws Exception {
        //需要生成令牌的数据
        User loginUser = new User();
        loginUser.setUserName("jack");
        loginUser.setPassword("6666");
        loginUser.setGender(false);

        //生成token:数据,过期时间,私钥
        String token = JwtUtils.generateToken(loginUser, 1, RsaUtils.getPrivateKey(priKeyPath));
        System.out.println(token);
    }

    @Test
    public void testParseToken() throws Exception {
        String token = "eyJhbGciOiJSUzI1NiJ9.eyJjbGFzcyI6ImNvbS5jenh5LmRvbWFpbi5Vc2VyIiwiZ2VuZGVyIjpmYWxzZSwicGFzc3dvcmQiOiI2NjY2IiwidXNlck5hbWUiOiJqYWNrIiwiZXhwIjoxNzAyNTQxNjcxfQ.YSZq8gE3Urx3CPXqT07FyzPgy8IEQWWVYWoNDRR42ed27IBaDWrIYZ4paJRefHL1eEy_7CPvlRhEJBzfBrihZ9hme2rEhZp8PSro8UuYTb6_73y3JWDlLvWE0wyosrh-69Y37jADB8xXN4s9i8BU7EQVDjNHhfKUu5b6vXfZQSg";
        User loginUser = JwtUtils.getObjectFromToken(token, RsaUtils.getPublicKey(pubKeyPath), User.class);
        System.out.println(loginUser);
    }
}

1.5 配置yml

#自定义内容
sc:
  jwt:
    secret: sc@Login(Auth}*^31)&czxy% # 登录校验的密钥(自定义内容)
    pubKeyPath: D:/rsa/rsa.pub # 公钥地址
    priKeyPath: D:/rsa/rsa.pri # 私钥地址
    expire: 360 # 过期时间,单位分钟

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值