Я использую Struts, поэтому он сделает пересылку для вас. Если у вас нет фреймворка (почему бы и нет?), Вам придется сделать это вручную.
Спецификация Java EE охватывает сервлет j_security_check.
Страница входа отправляет j_username и j_password в сервлет j_security_check. Ваше приложение будет настроено на ошибку на несанкционированной странице (см. Web.xml), но (первоначально) будет вызывать сервлет. 401 или 403 перейдут на запрещенную страницу (снова web.xml)
Внутри этого сервлета (который расширяет HttpServlet) - вы проверите все эти хорошие вещи.
public final void doGet(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response)
throws javax.servlet.ServletException, java.io.IOException
{
// initialize the app
AppInit initializer = new AppInit();
// get the logger
log = new Log4jWrapper(this.getClass());
// initialize the application session
HttpSession sess = request.getSession(true);
sess.setAttribute(CommonConstants.SESSION_CURR_USER_ID, request.getRemoteUser());
// initialize the JSP to forward to based on the user role
String fwdJSP = "SetupMainPage.jsp";
if (request.isUserInRole(CommonConstants.ROLE_MANAGER)) {
log.debug("User is a Manager");
}
//else other role checks - (these are users in groups in the LDAP)
// initialize the application session and set a variable to indicate that
// we are coming from a first time login (not a timeout login)
sess.setAttribute(CommonConstants.SESSION_COMING_FROM_INITIAL_LOGIN,"TRUE");
disp = getServletContext().getRequestDispatcher("SetupMainPage.jsp");
disp.forward(request, response);
}
//else failure
Неизвестный пользователь
[22.11.08 8: 54: 47: 993 EST] 7f6ac69c FormLoginServ E SECJ0118E: Ошибка аутентификации во время аутентификации для пользователя s
правильный пользователь - неправильный пароль, но request.getRemoteUser () будет иметь значение
[22.11.08 8: 56: 45: 082 EST] 7f51469c FormLoginServ E SECJ0118E: Ошибка аутентификации во время аутентификации для пользователя jbsymolo
К сожалению - у меня нет примеров того, как кто-то заблокирован, но я собираюсь предположить, что для главного каталога безопасности (LDAP) у вас будет запись для пользователя.
Это от кого-то другого (поэтому я не могу взять кредит)
Мне кажется, на этой странице описано, как делать то, что вы хотите.
В частности, как извлечь исключение аутентификации из произвольного базового источника аутентификации (похоже, что Websphere называет их реестрами пользователей).
Throwable t = com.ibm.websphere.security.auth.WSSubject.getRootLoginException ();
if (t! = null)
t = определить причину (t);
Где defineCause () определено на той же странице. Таким образом, даже если ваш сервер настроен для аутентификации на тракторе John Deer, у вас будет доступ к «OutOfGasLoginException», если он есть. Приведенный выше код может идти в Servlet, Servlet Filter или JSP, который перенаправляется контейнером (как описано выше jsymolon). Он просто анализирует исключения и затем помещает соответствующее понятное сообщение об ошибке на полученную страницу.