WebView如何实现加载URL有效得白名单校验
时间: 2024-09-11 20:11:16 浏览: 160
WebView在Android中加载URL时,为了实现有效的白名单校验,你可以采用以下步骤:
1. **创建白名单列表**:
列出所有允许加载的域名或URL模式,存储在一个集合(如ArrayList、HashSet等)或自定义的数据结构里。
```java
List<String> allowedDomains = Arrays.asList(
"https://www.example1.com",
"http://subdomain.example2.net",
"file:///path/to/local/files"
);
```
2. **设置安全策略**:
在`WebViewClient`或`WebSettings`对象中配置白名单检查。使用`setUrlSchemeWhitelist()`方法允许指定的URL前缀,或使用`setBlockNetworkImage()`和`setLoadWithOverviewMode()`来限制非白名单资源的加载。
```java
WebSettings settings = webView.getSettings();
settings.setAllowFileAccessFromFileURLs(true); // 如果需要从文件系统加载资源
settings.setAllowUniversalAccessFromFileURLs(false);
// 配置白名单 URL
for (String domain : allowedDomains) {
if (domain.startsWith("http")) {
settings.setUrlSchemeWhitelist(Uri.parse(domain));
}
}
```
3. **拦截并处理请求**:
实现`WebViewClient`的`shouldInterceptRequest()`方法,这里会对每个请求进行检查,如果不在白名单内则返回`false`阻止加载。
```java
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldInterceptRequest(WebView view, WebResourceRequest request) {
String url = request.getUrl().toString();
return !allowedDomains.contains(url) ? false : super.shouldInterceptRequest(view, request);
}
});
```
4. **错误处理**:
可能会遇到一些特殊情况,比如用户手动输入了禁止访问的URL,这时可以添加额外的验证或提示。
```java
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
// 检查是否在白名单之外,显示错误消息或阻止加载
//...
}
```
阅读全文