Страница 1 из 1
Log out в JSP + Tomcat
Добавлено: 22 сен 2004, 13:34
Deady
как в JSP в томкате сделать log out если авторизация BASIC:
Код: Выделить всё
<security-constraint>
<web-resource-collection>
<web-resource-name>Name</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>user</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>Name</realm-name>
</login-config>
способ из примеров томката
Код: Выделить всё
if (request.getParameter("logoff") != null) {
session.invalidate();
response.sendRedirect("index.jsp");
return;
}
не канает.
Добавлено: 22 сен 2004, 15:26
AiK
Deady, дело тут не в Томкате и не в JSP, а в браузере и протоколе HTTP.
Бразуер сохраняет пару логин и пароль, если мне мой склероз не изменяет, до тех пор, пока посетитель не перейдёт в директорию выше (т.е. для которой пара не валидна) или же вообще домен не покинет (браузер не закроет). Т.е. если у тебя index.jsp в запароленной директории находится, то очевидно что это не сработает. Единственный способ принудительно указать браузеру, что пара невалидна, это снова ему отправить заголовок 401. Подробнее можно прочитать в rfc2617.
Добавлено: 22 сен 2004, 15:37
Deady
не канает. отправил сначала 401 ошибку, нажал back в браузере и обновил - никаких запросов на ввод имени/пароля.
потом перенаправил на уровень выше, и по аналогичному сценарию - тоже самое.
Добавлено: 22 сен 2004, 15:39
Deady
вот если браузер закрыть, а потом запустить снова, тогда катит )
Добавлено: 22 сен 2004, 16:02
AiK
Deady, как только ты отправил 401 ответ сервера, ты должен сразу же должен в браузере увидеть диалог для ввода логина и пароля. Не увидеть его можно только по двум причинам: 1) заголовок неправильно сформирован 2) ты принял переданную тебе пару как правильную.
Добавлено: 22 сен 2004, 16:35
Deady
это код начиная с самого начала:
Код: Выделить всё
<%@ page contentType="text/html; charset=windows-1251"%>
<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>
<%@ page import="java.util.Date"%>
<%@ page import="java.sql.*"%>
<%@ page import="java.text.*"%>
<%!
private Connection conn;
%>
<%
if (request.getParameter("logoff") != null) {
session.invalidate();
//response.sendRedirect("http://localhost");
response.sendError(401, "Logout successful.");
return;
}
%>
щас остановился на таком варианте:
Код: Выделить всё
<%
if (request.getParameter("logoff") != null) {
session.invalidate();
%>
<HTML>
<BODY onload="window.close()">
</BODY>
</HTML>
<%
//response.sendRedirect("http://localhost");
//response.sendError(401, "Logout successful.");
return;
}
%>
Добавлено: 22 сен 2004, 16:48
AiK
Deady, если я ничего не путаю, то 401 должен быть самым первым ответом.
У тебя же первым пойдёт ответ 200. Запусти телнет и убедись в этом самостоятельно.
Добавлено: 22 сен 2004, 17:04
Deady
Вставил в самое начало файла:
Код: Выделить всё
<%
if (request.getParameter("logoff") != null) {
session.invalidate();
response.sendError(401, "Logout successful.");
return;
}
%>
то же самое