解析JWT中的字段
我们将引入一个JWT解析库并将其添加到Gateway服务器的pom.xml文件中。有多个令牌解析器可用,但我们选择了Apache Commons Codec和 org.json 包来解析JSON体。
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20190722</version>
</dependency>
一旦库被添加,我们就可以添加一个名为 getUsername() 的新方法到 TrackingFilter 中。以下清单显示了这个新方法:
private String getUsername(HttpHeaders requestHeaders){
String username = "";
if (filterUtils.getAuthToken(requestHeaders)!=null){
String authToken = filterUtils.getAuthToken(requestHeaders)
.replace("Bearer ","");
JSONObject jsonObj = decodeJWT(authToken);
try {
username = jsonObj.getString("preferred_username");
}catch(Exception e) {
logger.debug(e.getMessage());
}
}
return username;
}
private JSONObject decodeJWT(String JWTToken) {
String[] split_string = JWTToken.split("\\.");
String base64EncodedBody = split_string[1];
Base64 base64Url = new Base64(true);
String body = new String(base64Url.decode(base64EncodedBody));
JSONObject jsonObj = new JSONObject(body);
return jsonObj;
}
为了使这个示例工作,我们需要确保 FilterUtils 中的 AUTH_TOKEN 变量被设置为 Authorization。一旦我们实现了 getUsername() 函数,就可以在 TrackingFilter 的 filter() 方法中添加System.out.println,以打印从流经网关的JWT中解析出的 preferred_username。
如果一切成功,您应该在控制台日志中看到以下内容:
tmx-correlation-id found in tracking filter: 26f2b2b7-51f0-4574-9d84-07e563577641.
The authentication name from the token is : admin
Last updated