android - 在android中通过WebView处理用户登录
问题描述
我已经在我的 android 应用程序中实现了一个 Webview,并且第一次,用户应该登录(在 Webview 中加载的服务器端实现的登录页面)。因此,我想知道如何在 Webview 中检查是否成功登录,以决定重定向到客户端的另一个片段。
解决方案
您可以在成功登录时拦截 URL 重定向shouldOverrideUrlLoading
并获取 cookie/令牌
public class WebViewActivity extends Activity {
WebView webView;
public static final String TAG = WebViewActivity.class.getSimpleName();
@SuppressLint("SetJavaScriptEnabled")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setResult(Activity.RESULT_OK, null);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_sso);
String url = getIntent().getStringExtra(URL);
webView = findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setSupportZoom(false);
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
try {
// If coming from our system, then we need to check the cookie for username password
if (url.contains("Your_url")) {
String cookie = getCookie(url, "COOKIE_NAME");
//pass the data from your webview login to your Activity
setResult(LoginActivity.SSO_ACTIVITY_RESULT, null);
WebViewActivity.this.finish();
return true;
}
} catch (Exception ex) {
setResult(Activity.RESULT_CANCELED, null);
WebViewActivity.this.finish();
}
return false;
}
});
try {
webView.loadUrl(url);
} catch (Exception ex) {
Log.e(TAG, ex.getMessage());
}
}
private String getCookie(String url, String cookieName) {
String CookieValue = null;
CookieManager cookieManager = CookieManager.getInstance();
String cookies = cookieManager.getCookie(url);
String[] temp = cookies.split(";");
for (String ar1 : temp) {
if (ar1.contains(cookieName)) {
CookieValue = ar1;
break;
}
}
return CookieValue;
}
}
推荐阅读
- django - Django:在 UpdateView 中覆盖 get_queryset()
- r - R 使用 dplyr 根据列中的最大值对数据帧进行变异
- python - 尝试添加所有值
- ruby-on-rails - Turbolinks 5.2.0 渲染组件两次 => 很好理解完整的事件列表并修复了该效果
- c# - z 顺序更改时的 Winform 控件事件
- python - Tensorflow 二值图像分类的概率
- python - 未找到 SWIG 生成的 python 文件
- java - 无法自动检测 kubelet URL:datadog_checks.base.errors.CheckException
- excel - 按列名重命名列并与其他工作表合并
- java - 如何使 RTL 背景 android