Restrinja as páginas da web que podem chamar APIs JavaScript (JSAPIs) específicas no contêiner H5 do mPaaS implementando um provedor de controle de acesso personalizado.
Por padrão, qualquer página carregada no contêiner H5 pode invocar qualquer JSAPI. Implementar H5JSApiPermissionProvider permite controlar cada chamada de JSAPI com base no domínio e no esquema da URL antes da execução.
Procedimento
-
Implemente um provedor de controle de acesso personalizado. Crie uma classe que implemente
H5JSApiPermissionProvidere sobrescreva seus dois métodos:public class H5JSApiPermissionProviderImpl implements H5JSApiPermissionProvider { @Override public boolean hasDomainPermission(String jsapi, String url) { // Called for every JSAPI request. Return true to allow, false to deny. // Always check jsapi, url, and uri for null before use to avoid NullPointerException. Uri uri = Uri.parse(url); String domain = uri.getHost(); String scheme = uri.getScheme(); if (!TextUtils.isEmpty(domain) && domain.equals("www.example.com") && "https".equals(scheme)) { return true; } else { return false; } } @Override public boolean hasThisPermission(String jsapi, String url) { // Controls JSAPI-level permission regardless of URL. // Return false to defer all per-JSAPI decisions to hasDomainPermission. return false; } }Referência dos métodos:
Método
Parâmetros
Valor de retorno
hasDomainPermission(String jsapi, String url)jsapi: nome da JSAPI chamada;url: URL da página solicitantetruepara permitir a chamada;falsepara negá-lahasThisPermission(String jsapi, String url)Mesmos parâmetros acima
truepara conceder permissão no nível da JSAPI, ignorando verificações de domínio;falsepara delegar a decisão ahasDomainPermissionImportanteCorresponda às URLs com precisão. Verifique sempre, no mínimo, o esquema e o host da URI. Evite métodos de string imprecisos como
contains,startsWith,endsWitheindexOf. Use expressões regulares apenas se puder garantir que estejam ancoradas e sejam inequívocas. -
Registre o provedor. Chame
setProviderapós a inicialização do mPaaS e antes da abertura do contêiner H5.H5Utils.setProvider(H5JSApiPermissionProvider.class.getName(), new H5JSApiPermissionProviderImpl());