2017-02-10 1 views
0

Ich arbeite derzeit an einem Stück Code in einer Feder-Anwendung, die entscheiden muss, ob der Benutzer, der sich anmeldet, auf die neue Website (auf einem anderen Server) umgeleitet werden soll oder weiter das Alte.Umleiten von Anwendung nach POST zu anderen Server

Ich habe dies über POST mit Apache HttpClient getan und ich konnte auf der neuen Website von der alten Anmeldung anmelden.

Mein Problem ist, dass ich den Browser nach der Anmeldung nicht auf die neue Seite umleiten kann und "eingeloggt" bleibe, sondern mich auf die Login-Seite der neuen Seite umleite, weil ich nicht eingeloggt bin in.

private void redirect2NewSite(HttpServletResponse response, String docNum, String username, String passwd) { 

    String url = "http://localhost:9080/website/doLogin"; 

    HttpClient client = HttpClientBuilder.create().build(); 
    HttpPost post = new HttpPost(url); 

    List<NameValuePair> urlParameters = new ArrayList<>(); 
    urlParameters.add(new BasicNameValuePair("documentNumber", docNum)); 
    urlParameters.add(new BasicNameValuePair("username", username)); 
    urlParameters.add(new BasicNameValuePair("password", passwd)); 

    post.setEntity(new UrlEncodedFormEntity(urlParameters)); 
    HttpResponse postResponse = client.execute(post); 

    String responseUrl = postResponse.getFirstHeader("Location").getValue(); 

    response.setHeader("Location", responseUrl); 
    response.sendRedirect(responseUrl);    // This sends me to the new page login 
             // But should send me to the home page, already logged in 
} 

Das alte Projekt verwendet Struts, um an Controller oder jsps umzuleiten.

Antwort

0

Ich habe es endlich funktioniert, es war ein sehr altes Projekt, das Frames in seiner HTML verwendet. Also machte ich den Beitrag über JSP + Javascript, um es wie folgt einzureichen:

Beachten Sie das target="_top" Attribut, das die andere Webseite erlaubt, außerhalb des Rahmens geladen zu werden. Sonst würde es nicht funktionieren.

<form action="<%=newLoginUrl%>" method="post" id="redirectForm" target="_top"> 
    <input type="hidden" name="documentNumber" value="<%=docNum%>" /> 
    <input type="hidden" name="username" value="<%=userName%>" /> 
    <input type="hidden" name="password" value="<%=userPassword%>" /> 
</form> 


<script type="text/javascript"> 
    document.getElementById("redirectForm").submit(); 
</script> 
1

Eine eingeloggte Sitzung basiert in der Regel auf einer Art von Cookie. Die Cookies sind an eine Domain angehängt. Wenn Sie sich in der ersten Site anmelden (localhost: 9080), haben Sie dort einen Cookie. Wenn du auf eine andere Seite gehst (zB google.com), ist dein Cookie dort nicht gültig, also würde HttpClient das Cookie nicht senden.

Wenn Sie möchten, könnten Sie Hand manipulieren/neue Cookies erstellen, um sie für die neue Website gültig zu machen.

Verwandte Themen