class QueryParameterCallbackUrlResolver implements CallbackUrlResolver {
    @Getter
    @Setter
    private String clientNameParameter = Pac4jConstants.DEFAULT_CLIENT_NAME_PARAMETER;

    private Map<String, String> customParams = new HashMap<>();

    /**
     * <p>Constructor for QueryParameterCallbackUrlResolver.</p>
     */
    public QueryParameterCallbackUrlResolver() {
    }

    /**
     * <p>Constructor for QueryParameterCallbackUrlResolver.</p>
     *
     * @param customParams a {@link Map} object
     */
    public QueryParameterCallbackUrlResolver(final Map<String, String> customParams) {
        this.customParams = customParams;
    }

    /** {@inheritDoc} */
    @Override
    public String compute(final UrlResolver urlResolver, final String url, final String clientName, final WebContext context) {<FILL_FUNCTION_BODY>}

    /** {@inheritDoc} */
    @Override
    public boolean matches(final String clientName, final WebContext context) {
        val name = context.getRequestParameter(this.clientNameParameter).orElse(null);
        return CommonHelper.areEqualsIgnoreCaseAndTrim(name, clientName);
    }
}

        var newUrl = urlResolver.compute(url, context);
        if (newUrl != null && !newUrl.contains(this.clientNameParameter + '=')) {
            newUrl = CommonHelper.addParameter(newUrl, this.clientNameParameter, clientName);
        }
        for (val entry : this.customParams.entrySet()) {
            newUrl = CommonHelper.addParameter(newUrl, entry.getKey(), entry.getValue());
        }
        return newUrl;
    
<no_super_class>