我一直在不知疲倦地在我在大学使用的网站上学习和实施自动身份验证。我相信我现在已经成功设置了我的应用程序的自动身份验证部分,但是我现在不知道如何在他们通过登录阶段时向他们显示网站。我知道如何在自动身份验证之前执行此操作,但由于我已使用JSoup进行自动身份验证,因此我只剩下一个包含网页的Document变量。是否有可能现在将该文档加载到WebView中,以便用户继续使用该网站,就好像他们刚刚手动登录一样,或者我是否以错误的方式解决了这个问题?我也无法在我的线程上使用.join()
方法,因为我没有处理错误,但我不确定我应该在何处或如何处理此InteruptException。
到目前为止,这是我的代码:
`
import android.graphics.Bitmap;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.CookieManager;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import org.apache.commons.codec.binary.Base64;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import java.io.IOException;
public class MainActivity extends AppCompatActivity {
private String url;
private WebView web;
private Document doc;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
web = (WebView) findViewById(R.id.webView);
CookieManager.getInstance().setAcceptCookie(true);
web.getSettings().setDomStorageEnabled(true);
System.out.println("About to try!!!!!!!!");
Thread thread = new Thread(new Runnable()
{
@Override
public void run()
{
String username2 = "*********";
String password2 = "*********";
String login = username2 + ":" + password2;
url = "https://hrorganiser.essex.ac.uk/";
String base64login = new String(Base64.encodeBase64(login.getBytes()));
try
{
doc = Jsoup.connect(url).header("Authorization", "Basic " + base64login).get();
System.out.println(">> Connection Successful");
}
catch (Exception e)
{
e.printStackTrace();
System.out.println(">> Connection To "+url+" Failed");
}
}
});
thread.start();
thread.join();
if (doc == null) {
System.out.println("Error Connecting...");
} else {
web.loadUrl(doc.html());
}
}
}`
答案 0 :(得分:0)
使用Jsoup
进行身份验证后,Jsoup
的响应将包含来自服务器的 Cookie 。服务器为您提供此cookie以识别您并证明您是经过身份验证的用户。
在您的情况下,您只需要使用Jsoup
获取 Cookie并使您的WebView
使用 Cookie。
要获取Cookie,而不是:
doc = Jsoup.connect(url).header("Authorization", "Basic " + base64login).get();
您需要:
Connection.Response res = Jsoup.connect(url).header("Authorization", "Basic " + base64login).method(Method.GET).execute(); // you might need to use "Method.POST" for the parameter for method
然后获取Cookie :
Map<String, String> cookies = res.cookies(); // get the cookie
Document doc = res.parse(); // get the html document
现在您只需要使用此Cookie设置CookieManager
,然后您就可以使用WebView
作为登录用户。要详细了解如何让CookieManager
使用此Cookie,请按照great answer here进行操作。您需要重新格式化您的cookies
到standard HTTP request header
之后的String