2011-02-28 2 views
4

Как и следовало ожидать, загружается страница входа в системе, когда запрашивается защищенный/безопасный ресурс:Перенаправление на защищенный ресурс или исходный/сохраненный запрос после Servlet 3.0 Проверка подлинности HttpServletRequest # login()?

<login-config> 
    <auth-method>FORM</auth-method> 
    <realm-name>jdbc</realm-name> 
    <form-login-config> 
     <form-login-page>/login.xhtml</form-login-page> 
     <form-error-page>/login.xhtml</form-error-page> 
    </form-login-config> 
</login-config> 

Я понимаю, j_security_check будет автоматически пересылаться на защищаемом/безопасный ресурс, если аутентификация успешна:

<form method="post" action="j_security_check"> 
    <input type="text" name="j_username"> 
    <input type="password" name= "j_password"> 
</form> 

Однако , Я хотел бы разрешить пользователям зарегистрировать (или войти в систему), чтобы продолжить, поэтому я использовал JSF 2.0: <h:form..., EL: #{loginBean.register()}... и т. Д. ... и я программно удостоверяюсь с помощью Servlet 3.0:

public void register() { 
    HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest(); 

    try { 
     // Register... 

     request.login(this.username, this.password); 

     // Redirect to the protected/secure resource... 

    } catch (ServletException e) { 
     ... 
    } 
} 

Как узнать, что изначально запросил ресурс? Возможно:

  • Get "сохранен запрос" от сеанса (контейнер конкретного)?
  • Попробуйте получить «первоначальный запрос» каким-либо образом (где)?
  • Все, что связано с диспетчером запросов (wild guess)?
  • Использовать заголовок «referer» (плохая идея)?
  • Создать модуль аутентификации сервера (SAM) (не простой)?

Любой совет будет очень благодарен!

ответ

5

Страница входа находится под обложками, открытыми переадресацией, а исходный запрос URI доступен как атрибут запроса с именем javax.servlet.forward.request_uri.

Итак:

String uri = request.getAttribute("javax.servlet.forward.request_uri"); 

или, более JSF-иш:

String uri = externalContext.getRequestMap().get("javax.servlet.forward.request_uri"); 
+0

спасибо ** очень много !! ** –

+0

Добро пожаловать. – BalusC

+1

Здравствуйте, в моем случае сообщение журнала отображается с переадресацией. Я не знаю, как заставить его быть вперед, поэтому request_ui работает. Будучи перенаправлением (я имею в виду, в браузере отображается loginform.xhtml, а не исходная страница). Я получаю пустое значение для request_ui. Есть идеи, как это решить? Благодарю. – icordoba

 Смежные вопросы

  • Нет связанных вопросов^_^