Java登录功能实现token生成与验证
程序员文章站
2022-03-02 20:53:02
一、token与cookie相比较的优势 1、支持跨域访问,将token置于请求头中,而cookie是不支持跨域访问的; 2、无状态化,服务端无需存储token,只需要验证token信息是...
一、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、引入依赖
<dependency> <groupid>com.auth0</groupid> <artifactid>java-jwt</artifactid> <version>3.8.2</version> </dependency>
2、设置密钥和生存时间
//设置过期时间 private static final long expire_date=30*60*100000; //token秘钥 private static final string token_secret = "zceqiubfksjbfjh2020bqwe";
3、实现签名方法
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
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、测试
直接用生成的token去验证,成功
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); }
三、完整的token工具类代码
package xxx.utils; //你的包 import com.auth0.jwt.jwt; import com.auth0.jwt.jwtverifier; import com.auth0.jwt.algorithms.algorithm; import com.auth0.jwt.interfaces.decodedjwt; import java.util.date; import java.util.hashmap; import java.util.map; /** * @desc 使用token验证用户是否登录 * @author zm **/ public class tokenutils { //设置过期时间 private static final long expire_date=30*60*100000; //token秘钥 private static final string token_secret = "zcfasfhuauuhufguguwu2020bqwe"; 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; } public static boolean verify(string token){ /** * @desc 验证token,通过返回true * @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; } } public static void main(string[] args) { string username ="zhangsan"; string password = "123"; string token = token(username,password); system.out.println(token); boolean b = verify("eyjhbgcioijiuzi1niisinr5cci6ikpxvcj9.eyjwyxnzd22yzci6ijeymyisimv4cci6mtu3ode5nzqxmywidxnlcm5hbwuioij6agfuz3nhbij9.iytzt0tisqqzhghsnuaqhgv8ld7idjuyjn3mgbulmjg"); system.out.println(b); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: Android开发文件存储实例
下一篇: 灌汤包要发面吗
推荐阅读
-
PHP 实现超简单的SESSION与COOKIE登录验证功能示例
-
PHP 实现超简单的SESSION与COOKIE登录验证功能示例
-
django与小程序实现登录验证功能的示例代码
-
js+java实现登录滑动图片验证功能
-
jsp+java servlet实现简单用户登录和注册页面(连接数据库,登录页面包含验证码,两周内免登陆等功能)
-
koa+jwt实现token验证与刷新功能
-
Java登录功能实现token生成与验证
-
django与小程序实现登录验证功能的示例代码
-
koa+jwt实现token验证与刷新功能
-
jsp+java servlet实现简单用户登录和注册页面(连接数据库,登录页面包含验证码,两周内免登陆等功能)