JWT(JSON WEB TOKEN)实例

1.jwt简介

jwt是一种跨域认证技术,主要用于分布式,微服务架构下,单点认证后全服务都能识别用户信息。还可以通过JWT进行信息交换,但是尽量不要放敏感信息以及尽量通过https传输保证通道安全。

例如我们用jwt做登入认证,可以在用户进行验证登入成功后生成一个jwt返回在前端保存(服务器端可保存也可不保存),然后前端带着它可以进行跨域跨系统传输,就可以避免重复登入校验。

2.组成部分

jwt加密串由三部分组成分别为头部(header),载体(playload),签名(sign)。中间用.隔开。如下所示:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJhdXRoMCIsImV4cCI6MTYzNTgyNzExNywidXNlcm5hbWUiOiJsaWxpIn0.O0DolSYkEX0Q0L7UQOR2-jp7I1-p8r1a1Vath17A-Dw

3.使用示例

import java.util.Date;

import org.userMgs5002.Dao.SysUser;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.JWTVerificationException;
import com.auth0.jwt.exceptions.TokenExpiredException;
import com.auth0.jwt.interfaces.DecodedJWT;

public class TokenUtil {
	
	 private static final long EXPIRE_TIME=60*1000;           //设置jwt过期时间  
	    private static final String TOKEN_SECRET="token123";  //加密密匙


	    //测试main方法
	    public static void main(String[] args) {
	    	SysUser s = new SysUser();
	    	s.setUserName("lili");
	    	String token = sign(s);
			System.out.println(token);
			 try {
				Thread.sleep(60000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			System.out.println(verify(token));
			
			
		}
	    
	    
	    
	    /**
	     * jwt签名生成
	     * @param 
	     * @return
	     */
	    public static String sign(SysUser user){

	        String token = null;
	        try {
	            Date expiresAt = new Date(System.currentTimeMillis() + EXPIRE_TIME);  //设置过去时间
	            token = JWT.create()
	                    .withIssuer("auth0")       //jwt签发者签名
	                    .withClaim("username", user.getUserName())   //传输参数 这里指用户名
	                    .withClaim("password", "123456")            //传输参数 这里指密码
	                    .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("auth0").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 (TokenExpiredException e){
	                return false;
				} 
	            catch (IllegalArgumentException e) {
	                return false;
				} catch (JWTVerificationException e) {
	                return false;
				}

	    }

}

   


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值