首页 > 编程语言 >登录功能-Java实现token的生成与验证

登录功能-Java实现token的生成与验证

时间:2024-10-21 13:01:16浏览次数:1  
标签:username Java String 登录 JWT token cookie password

一、token与cookie相比较的优势
1、支持跨域访问,将token置于请求头中,而cookie是不支持跨域访问的;

2、无状态化,服务端无需存储token,只需要验证token信息是否正确即可,而session需要在服务端存储,一般是通过cookie中的sessionID在服务端查找对应的session;

3、无需绑定到一个特殊的身份验证方案(传统的用户名密码登陆),只需要生成的token是符合我们预期设定的即可;

4、更适用于移动端(Android,iOS,小程序等等),像这种原生平台不支持cookie,比如说微信小程序,每一次请求都是一次会话,当然我们可以每次去手动为他添加cookie,详情请查看博主另一篇博客;

5、避免CSRF跨站伪造攻击,还是因为不依赖cookie;

二、基于JWT的token认证实现
JWT:JSON Web Token,其实token就是一段字符串,由三部分组成:Header,Payload,Signature

1、引入依赖

1 2 3 4 5 <dependency>       <groupId>com.auth0</groupId>       <artifactId>java-jwt</artifactId>       <version>3.8.2</version>     </dependency>

2、设置密钥和生存时间

1 2 3 4 //设置过期时间     private static final long EXPIRE_DATE=30*60*100000;     //token秘钥     private static final String TOKEN_SECRET = "ZCEQIUBFKSJBFJH2020BQWE";

  

3、实现签名方法

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 public static String token (String username,String password){           String token = "";         try {             //过期时间             Date date = new Date(System.currentTimeMillis()+EXPIRE_DATE);             //秘钥及加密算法             Algorithm algorithm = Algorithm.HMAC256(TOKEN_SECRET);             //设置头部信息             Map<String,Object> header = new HashMap<>();             header.put("typ","JWT");             header.put("alg","HS256");             //携带username,password信息,生成签名             token = JWT.create()                     .withHeader(header)                     .withClaim("username",username)                     .withClaim("password",password).withExpiresAt(date)                     .sign(algorithm);         }catch (Exception e){             e.printStackTrace();             return  null;         }         return token;     }

  

4、验证token

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 public static boolean verify(String token){         /**          * @desc   验证token,通过返回true          * @create 2019/1/18/018 9:39          * @params [token]需要校验的串          **/         try {             Algorithm algorithm = Algorithm.HMAC256(TOKEN_SECRET);             JWTVerifier verifier = JWT.require(algorithm).build();             DecodedJWT jwt = verifier.verify(token);             return true;         }catch (Exception e){             e.printStackTrace();             return  false;         }     }

  

5、测试

1)、直接用生成的token去验证,成功

1 2 3 4 5 6 7 8 public static void main(String[] args) {        String username ="zhangsan";         String password = "123";         String token = token(username,password);         System.out.println(token);         boolean b = verify(token);         System.out.println(b);     }

标签:username,Java,String,登录,JWT,token,cookie,password
From: https://www.cnblogs.com/stevenduxiang/p/18489222

相关文章