У меня есть следующий код, который будет вызывать сервер через HttpUrlConnection
.перенаправление HttpUrlConnection на другой сервлет не происходит
String response = HttpUtil.submitRequest(json.toJSONString(), "http://ipaddr:port/SessionMgr/validateSession?sessionId=_78998348uthjae3a&showLoginPage=true");
Вышеуказанные линии будут вызывать следующий код:
public static String submitRequest(String request, String **requestUrl**) {
try {
URL url = new URL(requestUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
OutputStream os = conn.getOutputStream();
os.write(request.getBytes());
os.flush();
if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
throw new RuntimeException("Failed : HTTP error code : "
+ conn.getResponseCode());
}
BufferedReader br = new BufferedReader(new InputStreamReader(
(conn.getInputStream())));
String output;
StringBuffer sb = new StringBuffer();
while ((output = br.readLine()) != null) {
sb.append(output);
}
conn.disconnect();
return sb.toString();
} catch (MalformedURLException e) {
} catch (IOException e) {
}
return "";
}
requestUrl
будет идти в сервлет ниже:
public class ValidateSessionServlet extends HttpServlet {
String session = req.getParameter(sessionId);
if (session == null) {
// redirect to servlet which will display login page.
response.setContentType("text/html");
String actionUrl = getIpPortUrl(request)
+ PropertyConfig.getInstance().getFromIdPConfig(globalStrings.getCheckSSOSession());
out.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\"> \n");
out.write("<html><head><body onload=\"document.forms[0].submit()\">\n");
out.write("<form method=\"POST\" action=\"" + actionUrl + "\">\n");
out.write("<input type=\"hidden\" name=\"locale\" value=\"" + locale + "\"/>\n");
out.write("<input type=\"hidden\" name=\"Sessionrequest\" value=\"" + true + "\"/>\n");
out.write("</form>\n</body>\n</html>\n");
}
}
В приведенном выше коде форма должна идти в сервлет как указано в actionUrl, но он снова переходит в сервлет, который находится на этапе (1).
1) Могу ли я узнать, можем ли мы сделать это выше html-формы на этапе (3) для отправки и перенаправления на сервлет в actionUrl.
В соответствии с приведенным выше кодом я суммирую требование. Если сеанс имеет значение null, я должен перенаправить пользователя на страницу входа в систему и проверить его на основе базы данных, а затем ответ должен перейти к шагу (1), возможно ли это?
Может ли какое-нибудь тело рассказать мне, есть ли у него решение или нет? –
Вы выполняете сообщение на стороне сервера, что вы делаете с выходом POST? Кстати, я думаю, что вы следуете опасному пути. Если вы хотите сделать RPC, как вызовы по HTTP, вы должны также полагаться на ответы JSON, смешанный режим (JSON или HTML) подвержен ошибкам (может быть сделано, но это вызовет всевозможные проблемы). – BigMike
Выполняете ли вы виды автоматизации на действующих веб-сайтах, автоматический вход в систему и т. Д.? Если да, попробуйте использовать селен. –