日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

一、Token優勢

Java實現基于token認證

山東掌趣網絡科技

?

1.1 與cookie相比較的優勢

1、支持跨域訪問,將token置于請求頭中,而cookie是不支持跨域訪問的;

2、無狀態化,服務端無需存儲token,只需要驗證token信息是否正確即可,而session需要在服務端存儲,一般是通過cookie中的sessionID在服務端查找對應的session;

3、無需綁定到一個特殊的身份驗證方案(傳統的用戶名密碼登陸),只需要生成的token是符合我們預期設定的即可;

4、更適用于移動端(Android,IOS,小程序等等),像這種原生平臺不支持cookie,比如說微信小程序,每一次請求都是一次會話,當然我們可以每次去手動為他添加cookie,詳情請查看博主另一篇博客;

5、避免CSRF跨站偽造攻擊,還是因為不依賴cookie;

6、非常適用于RESTful API,這樣可以輕易與各種后端(JAVA,.net,Python......)相結合,去耦合

還有一些優勢這里就不一一列舉了。

1.2 基于JWT的token認證實現

JWT:JSON Web Token,其實token就是一段字符串,由三部分組成:Header,Payload,Signature。詳細情況請自行百度,現在,上代碼。

二、加密解密

Java實現基于token認證

山東掌趣網絡科技

?

2.1 pom.xml

<!-- https://mvnrepository.com/artifact/com.auth0/java-jwt -->

<dependency>

<groupId>com.auth0</groupId>

<artifactId>java-jwt</artifactId>

<version>3.8.1</version>

</dependency>

<dependency>

<groupId>com.fasterxml.jackson.core</groupId>

<artifactId>jackson-core</artifactId>

<version>2.9.4</version>

</dependency>

<dependency>

<groupId>com.fasterxml.jackson.core</groupId>

<artifactId>jackson-annotations</artifactId>

<version>2.9.4</version>

</dependency>

<dependency>

<groupId>com.fasterxml.jackson.core</groupId>

<artifactId>jackson-databind</artifactId>

<version>2.9.4</version>

</dependency>

2.2 加密

//加密的數據

int userId = 51;

//加密的簽名

Algorithm algorithm = Algorithm.Hmac256("eyJhbGciO");

//加密頭

Map<String, Object> header = new HashMap<String, Object>();

header.put("typ", "JWT");

header.put("alg", "HS256");

try {

//超時時間

Date date = new Date(System.currentTimeMillis() + 30 * 1000);

//令牌token

String token = JWT.create().withHeader(header).withClaim("userId", userId).withExpiresAt(date)

.sign(algorithm);

System.out.println(token);

} catch (Exception e) {

// TODO: handle exception

}

2.3 解密

//前端傳過來的令牌

String token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1Nzg1NTEyOTgsInVzZXJJZCI6ImhlbGxvIn0.mVXwBkBMO-Sr3FJPZSVLezUuxdvMwNsGgRqTCVufH8o";

//和上面一樣的簽名

Algorithm algorithm = Algorithm.HMAC256("eyJhbGciO");

JWTVerifier verifier = JWT.require(algorithm).build();

//開始解密,失敗的話會出現異常

DecodedJWT jwt = verifier.verify(token);

System.out.println(jwt.getClaim("userId").asInt());

三、封裝工具類JWTUtil

Java實現基于token認證

山東掌趣網絡科技

?

public class JWTUtil {

private static final String TOKEN_SECRET = "eyJhbGciO";

private static final String CLAIM_NAME = "sign";

private static final long EXPIRE_TIME = 15 * 60 * 1000;

public static String sign(String sign) {

try {

Algorithm algorithm = Algorithm.HMAC256(TOKEN_SECRET);

Map<String, Object> header = new HashMap<String, Object>();

header.put("typ", "JWT");

header.put("alg", "HS256");

Date date = new Date(System.currentTimeMillis() + EXPIRE_TIME);

String token = JWT.create().withHeader(header).withClaim(CLAIM_NAME, sign).withExpiresAt(date)

.sign(algorithm);

return token;

} catch (Exception e) {

return null;

}

}

public static String verify(String token) {

try {

Algorithm algorithm = Algorithm.HMAC256(TOKEN_SECRET);

JWTVerifier verifier = JWT.require(algorithm).build();

DecodedJWT jwt = verifier.verify(token);

return jwt.getClaim(CLAIM_NAME).asString();

} catch (Exception e) {

return null;

}

}

}


山東掌趣網絡科技

分享到:
標簽:Java token
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定