package sl12tutorial;
import java.io.IOException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class Redirect extends HttpServlet
{
private static final String BKU_URL_ = "http://127.0.0.1:3495/http-security-layer-request";
// private static final String BKU_URL_ "http://127.0.0.1:13495/http-security-layer-request";
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException
{
doGet(request, response);
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException
{
// Session schon vorhanden?
HttpSession session = request.getSession(false);
if (session == null)
{
// Falls nein, Startseite erzeugen und als Antwort senden
processInitial(request, response);
}
else
{
// Falls ja, prüfen, ob Aufruf vom Browser oder von der BKU kommt
String useParam = request.getParameter("use");
if (useParam != null && "redirecturl".equals(useParam))
{
// Aufruf kommt vom Browser, Warteseite bzw. Endergebnis-Seite erzeugen und als Antwort senden
processRedirect(request, response, session);
}
else if (useParam != null && "dataurl".equals(useParam))
{
// Aufruf kommt von der BKU, XML-Befehlsantwort auswerten und an BKU senden
processDataURL(request, response, session);
}
else
{
processError(request, response, "Parameter \"use\" ist nicht vorhanden oder hat falschen Wert.");
session.invalidate();
}
}
}
private void processInitial(HttpServletRequest request, HttpServletResponse response) throws IOException
{
// Gespeicherte Session abrufen
HttpSession session = request.getSession(true);
String servletURL = encodeURL(request.getRequestURL().toString(), session);
// String servletURL = encodeURL("http://localhost:18080/SL12Tutorial/Redirect", session);
// Startseite mit Formular für BKU-Aufruf erzeugen
response.setStatus(200);
response.setContentType("text/html");
printForm(response, servletURL, BKU_URL_);
}
private void processDataURL(HttpServletRequest request, HttpServletResponse response, HttpSession session)
throws IOException
{
// XML-Befehlsantwort in Session speichern
String xMLResponse = request.getParameter("XMLResponse");
session.setAttribute("XMLResponse", xMLResponse != null ? xMLResponse : "Parameter XMLResponse in BKU-Request nicht gefunden.");
// an BKU senden
response.setStatus(200);
response.setContentType("text/plain");
response.getOutputStream().print("");
}
private void processRedirect(HttpServletRequest request, HttpServletResponse response, HttpSession session)
throws IOException
{
// Prüfen, ob XML-Befehlsantwort is Session gespeichert ist
String xMLResponse = (String) session.getAttribute("XMLResponse");
if (xMLResponse == null)
{
// Falls nein, Warteseite erzeugen und senden
String servletURL = encodeURL(request.getRequestURL().toString(), session);
// String servletURL = encodeURL("http://localhost:18080/SL12Tutorial/Redirect", session);
response.setStatus(200);
response.setContentType("text/html");
printRedirectWait(response, servletURL);
}
else
{
// Falls ja, Seite mit Endergebnis erzeugen senden
response.setStatus(200);
response.setContentType("text/html");
printRedirectFinal(response, xMLResponse);
session.invalidate();
}
}
private void processError(HttpServletRequest request, HttpServletResponse response, String msg) throws IOException
{
response.setStatus(200);
response.setContentType("text/plain");
response.getOutputStream().println("Fehler: " + msg);
}
private String encodeURL(String uRL, HttpSession session)
{
// Java Session ID in den verwendeten URLs kodieren
if (uRL == null || session == null) return uRL;
int inPos = uRL.indexOf('?');
if (inPos == -1) inPos = uRL.indexOf('#');
if (inPos == -1) inPos = uRL.length();
String returnVal = uRL.substring(0, inPos) + ";jsessionid=" + session.getId();
if (inPos < uRL.length()) returnVal += uRL.substring(inPos, uRL.length());
return returnVal;
}
private void printForm(HttpServletResponse response, String servletURL, String bkuURL) throws IOException
{
ServletOutputStream out = response.getOutputStream();
out.println("");
out.println("
Redirect: Start");
out.println("");
out.println("");
out.println("");
out.println("");
}
private void printRedirectFinal(HttpServletResponse response, String xMLResponse) throws IOException
{
ServletOutputStream out = response.getOutputStream();
out.println("");
out.println("");
out.println("Redirect: Synchronisation erfolgreich");
out.println("");
out.println("");
out.println("Die Antwort von der BKU ist eingetroffen:
");
xMLResponse = xMLResponse.replaceAll("<", "<");
out.println("" + xMLResponse + "
");
out.println("");
out.println("");
}
private void printRedirectWait(HttpServletResponse response, String servletURL) throws IOException
{
ServletOutputStream out = response.getOutputStream();
out.println("");
out.println("");
out.println("Redirect: Warteschleife");
out.println("");
out.println("");
out.println("");
out.println("Bitte warten. Sobald die Antwort von der BKU eingetroffen ist, wird sie hier angezeigt.
");
out.println("");
out.println("");
}
}