title: Custom Jwt convert Algorithm keywords: [“Custom Jwt Convert”] description: Custom Jwt convert Algorithm

Description

  • Users can customize the convert algorithm of Jwt-plugin to 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:

  1. 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.
        */
       @SPI
       public 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);
    
       }
    

    @Join public class CustomJwtConvertStrategy implements JwtConvertStrategy { @Override public CustomJwtRuleHandle parseHandleJson(final String handleJson) { return GsonUtils.getInstance().fromJson(handleJson, CustomJwtRuleHandle.class); } @Override public 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(); } }
  2. 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