Use o SDK para Android e configure regras de acesso baseadas em Referer em seus buckets do Object Storage Service (oss). Essas regras incluem uma lista de permissões de Referer, uma lista de bloqueios de Referer e uma opção para permitir solicitações com um Referer vazio. Esse recurso impede o hotlinking de seus arquivos do oss e ajuda a evitar custos de tráfego desnecessários.
Notas de uso
Antes, configure a proteção contra hotlink e familiarize-se com este recurso. Para mais informações, consulte Hotlink protection.
Este tópico usa o endpoint público da região china (Hangzhou). Para acessar o oss a partir de outros service da alibaba cloud na mesma região, use um endpoint interno. Para obter detalhes sobre as regiões e os endpoints compatíveis, consulte Regions and endpoints.
Este tópico mostra como crie uma instância do OSSClient com um endpoint do oss. Para configurações alternativas, como o uso de um domínio personalizado ou a autenticação com credenciais do Security Token Service (STS), consulte Initialization (Android SDK).
Para defina ou exclua a proteção contra hotlink, é necessário ter a permissão
oss:PutBucketReferer. Para obter a configuração de proteção contra hotlink, é necessário ter a permissãooss:GetBucketReferer. Para mais informações, consulte Attach a custom policy to a RAM user.
Defina a proteção contra hotlink
O código de exemplo 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 código de exemplo a seguir mostra como consultar as configurações de proteção contra 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 código de exemplo 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 obter o código de exemplo completo de proteção contra hotlink, consulte o GitHub.
Para mais informações sobre a operação de API para configure a proteção contra hotlink, consulte PutBucketReferer.
Para mais informações sobre a operação de API para obter a configuração de proteção contra hotlink, consulte GetBucketReferer.