Custom Jwt convert Algorithm
Description
- Users can customize the convert algorithm of
Jwt-pluginto achieve convert.
Extension
The default implementation is org.apache.shenyu.plugin.jwt.strategy.DefaultJwtConvertStrategy. The SPI mechanism is adopted for extension, and the steps are as follows:
-
Implements interface
org.apache.shenyu.plugin.jwt.strategy.JwtConvertStrategy/*** Represents a conversion strategy that convert jwt to some attributes of* serverWebExchange, especially attributes of the request header.*/@SPIpublic interface JwtConvertStrategy {/*** HandleJson needs to be parsed into jwtRuleHandle in order to* specify how to convert jwt.** @param handleJson handleJson from rule* @return jwtRuleHandle*/JwtRuleHandle parseHandleJson(String handleJson);/*** Converts jwt to some attributes of serverWebExchange based on jwtRuleHandle.** @param jwtRuleHandle jwtRuleHandle* @param exchange exchange* @param jwtBody jwtBody* @return serverWebExchange*/ServerWebExchange convert(JwtRuleHandle jwtRuleHandle, ServerWebExchange exchange, Map<String, Object> jwtBody);}@Joinpublic class CustomJwtConvertStrategy implements JwtConvertStrategy {@Overridepublic CustomJwtRuleHandle parseHandleJson(final String handleJson) {return GsonUtils.getInstance().fromJson(handleJson, CustomJwtRuleHandle.class);}@Overridepublic ServerWebExchange convert(final JwtRuleHandle jwtRuleHandle, final ServerWebExchange exchange, final Map<String, Object> jwtBody) {final CustomJwtRuleHandle customJwtRuleHandle = (CustomJwtRuleHandle) jwtRuleHandle;String customConvert = customJwtRuleHandle.getCustomConvert();ServerHttpRequest modifiedRequest =exchange.getRequest().mutate().header("custom", customConvert).build();return exchange.mutate().request(modifiedRequest).build();}} -
Configures SPI
custom=org.apache.shenyu.plugin.jwt.strategy.CustomJwtConvertStrategy
The project would use different conversion strategies based on thehandleType parameter of JwtRuleHandle . For example, for the following JwtRuleHandle,the project would use our above CustomJwtConvertStrategy . (Note: handleType is default or nonexistent, the project would use default DefaultJwtConvertStrategy)
{
"handleType":"custom",
"customConvert":"customConvert"
}
The case code is available for viewing in org.apache.shenyu.plugin.jwt.strategy.CustomJwtConvertStrategy