Use o sdk para Android para configure regras de acesso baseadas em Referer nos buckets do Object Storage Service (oss). Essas regras incluem uma lista de permissões de Referer, uma lista de bloqueios de Referer e a opção de permitir solicitações com Referer vazio. Esse recurso impede o hotlink dos arquivos no oss e ajuda a evitar custos desnecessários de tráfego.
Observações de uso
Antes de configure a proteção contra hotlink, familiarize-se com esse recurso. Para mais informações, consulte Proteção contra hotlink.
Este tópico usa o endpoint público da região China (Hangzhou). Para acessar o oss a partir de outros serviços da Alibaba Cloud na mesma região, use um endpoint interno. Para obter detalhes sobre as regiões e endpoints compatíveis, consulte Regiões e endpoints.
Este tópico demonstra como crie uma instância OSSClient com um endpoint do oss. Para configurações alternativas, como uso de domínio personalizado ou autenticação com credenciais do Security Token Service (STS), consulte Inicialização (Android SDK).
Para defina ou limpar a proteção contra hotlink, você precisa da permissão
oss:PutBucketReferer. Para obter a configuração de proteção contra hotlink, você precisa da permissãooss:GetBucketReferer. Para mais informações, consulte Anexar uma política personalizada a um usuário RAM.
Defina proteção contra hotlink
O exemplo de código a seguir mostra como configure a proteção contra hotlink para um bucket:
PutBucketRefererRequest request = new PutBucketRefererRequest();
request.setBucketName("examplebucket");
// Add a Referer whitelist. The Referer parameter supports the asterisk (*) and question mark (?) wildcard characters.
ArrayList<String> referers = new ArrayList<String>();
referers.add("http://www.aliyun.com");
referers.add("https://www.aliyun.com");
// referers.add("http://www.www.alibabacloud.com/help");
// referers.add("http://www.?.aliyuncs.com");
request.setReferers(referers);
OSSAsyncTask task = oss.asyncPutBucketReferer(request, new OSSCompletedCallback<PutBucketRefererRequest, PutBucketRefererResult>() {
@Override
public void onSuccess(PutBucketRefererRequest request, PutBucketRefererResult result) {
OSSLog.logInfo("code: " + result.getStatusCode());
}
@Override
public void onFailure(PutBucketRefererRequest request, ClientException clientException, ServiceException serviceException) {
OSSLog.logError("error: "+serviceException.getRawMessage());
}
});
task.waitUntilFinished();
Obter a configuração de proteção contra hotlink
O exemplo de código a seguir mostra como consultar as configurações de hotlink de um bucket:
GetBucketRefererRequest request = new GetBucketRefererRequest();
request.setBucketName("yourBucketName");
OSSAsyncTask task = oss.asyncGetBucketReferer(request, new OSSCompletedCallback<GetBucketRefererRequest, GetBucketRefererResult>() {
@Override
public void onSuccess(GetBucketRefererRequest request, GetBucketRefererResult result) {
// Get the Referer whitelist of the bucket.
ArrayList<String> list = result.getReferers();
for (String ref : list){
OSSLog.logInfo("info: " + ref);
}
}
@Override
public void onFailure(GetBucketRefererRequest request, ClientException clientException, ServiceException serviceException) {
OSSLog.logError("error: "+serviceException.getRawMessage());
}
});
task.waitUntilFinished();
Exclua a configuração de proteção contra hotlink
O exemplo de código a seguir mostra como exclua as configurações de proteção contra hotlink de um bucket:
PutBucketRefererRequest request = new PutBucketRefererRequest();
request.setBucketName("yourBucketName");
request.setAllowEmpty(true);
// Hotlink protection configurations cannot be directly cleared. You must create a new rule that allows empty Referers to overwrite the previous rule.
ArrayList<String> referers = new ArrayList<String>();
request.setReferers(referers);
OSSAsyncTask task = oss.asyncPutBucketReferer(request, new OSSCompletedCallback<PutBucketRefererRequest, PutBucketRefererResult>() {
@Override
public void onSuccess(PutBucketRefererRequest request, PutBucketRefererResult result) {
OSSLog.logInfo("code: " + result.getStatusCode());
}
@Override
public void onFailure(PutBucketRefererRequest request, ClientException clientException, ServiceException serviceException) {
OSSLog.logError("error: "+serviceException.getRawMessage());
}
});
task.waitUntilFinished();
Referências
Para ver o código de exemplo completo sobre proteção contra hotlink, acesse o GitHub.
Para mais detalhes sobre a operação de API usada para configure a proteção contra hotlink, consulte PutBucketReferer.
Para mais informações sobre a operação de API usada para obter a configuração de proteção contra hotlink, consulte GetBucketReferer.