powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Навигация с помощью JSF
18 сообщений из 18, страница 1 из 1
Навигация с помощью JSF
    #34294077
Sh_ura
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Страница JSP ввода имени пользователя и пароля. Страница сделана с использованием JSF. Это значит поля ввода и кнопка задаются с помошью тегов JSF:
<h:inputText value="#{userparams.user}"/>
<h:inputSecret value="#{userparams.password}"/>
<h:commandButton value="Login" action="welcome"/>

userparams- это bean

в faces-config.xml прописал правило навигации:
<navigation-case>
<from-outcome>welcome</from-outcome>
<to-view-id>/welcome.jsp</to-view-id>
</navigation-case>

В начале страницы welcome.jsp сттоит проверка прав пользователя на основе данных бина. Если не верно, то обратно на страницу ввода пароля. Если верно, то "Добро пожаловать" и все такое.
Проблема такая:
Если ввести нужные имя пользователя и пароль, и кликнуть на кнопке, то попадем на страницу welcome. Затем в броузере возвращаемся на предыдущую страницу и вводим новый пароль (неверный) и нажимаем кнопку. После этого попадаем опять на страницу welcome, хотя не должны.
В строке "адрес" вместо просто строки index.jsp добавляется jsessionid=... Может в этом проблема? И как с этим бороться?
Может есть другие варианты решения этой проблемы?

Спасибо.
...
Рейтинг: 0 / 0
Навигация с помощью JSF
    #34294141
crazytoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поставьте у вашего бина userparams атрибут managed-bean-scope=request
<managed-bean>
<managed-bean-name>userparams</managed-bean-name>
<managed-bean-class>userparams</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
в файле faces-config
...
Рейтинг: 0 / 0
Навигация с помощью JSF
    #34294226
Sh_ura
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Частично помогло, но не полностью. Проверка производится всегда, но теряется значение полей пользователя и пароль. Например, если в welcome.jsp вывести текст <h:outputText value="#{userparams.user}"/>, то вместо имени будет пусто.
Возможно дело в том что я использую тот же бин для проверки соответствия пользователя и пароля. Для этого есть метод getAccess, и я его вызываю так:
<jsp:useBean id='userparams' scope='request' class='ru.bitec.global.btkweb.ConnectBean'></jsp:useBean>
<c:if test='<%=!userparams.getAccess()%>' >
<jsp:forward page="login.jsp">
<jsp:param name="nextpage" value="login.jsp"/>
</jsp:forward>
</c:if>

c- это JSTL.
Каким-то другим способом получить значение для JSTL я не знаю.
После этого текста нормально возвращается значение бина только обычным способом JSP:
<%=userparams.getUser()%>
или
<jsp:getProperty name='userparams' property='user'/>

Пробовал в различных вариантах атрибут "scope", не помогает.

Как можно непосредственно тегами JSF передать значение бина в JSTL?
Или что-то другое использовать вместо JSTL?
...
Рейтинг: 0 / 0
Навигация с помощью JSF
    #34294313
crazytoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не понимаю зачем вы вообще городите этот огород с JSTL? По-моему намного проще написать в вашем бине метод по проверке аутентификации, который бы возвращал нужный outcome, ведь собственно для упрощения таких задач jsf и создавался. Вот пример кода.

public class UserParams()
{
private String name;
private String password;
................................getters setters;
public String checkUser()
{
if(name=="user"&&password="password") return "welcome";
else return "failure";
}
}

да и прописать нужную навигацию - чтото вроде

<navigation-rule>
<from-view-id>index.jsp</from-view-id>
<navigation-case>
<from-outcome>welcome</from-outcome>
<to-view-id>/welcome.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>failure</from-outcome>
<to-view-id>/login.jsp</to-view-id>
</navigation-case>
...
Рейтинг: 0 / 0
Навигация с помощью JSF
    #34294318
crazytoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да совсем забыл.......
<h:commandButton value="Login" action="userparams.checkUser"/> еще надо добавить
...
Рейтинг: 0 / 0
Навигация с помощью JSF
    #34295227
Sh_ura
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня была идея создать одно место проверки доступа. А навигацией решается только доступ с конкретной jsp страницы. Например, если в браузере кто то наберет сразу "welcome.jsp", то каким образом с помощью правил навигации перевести его на страницу "login.jsp", если пользователь еще не зарегистрирован?
А можно было бы cделать отдельную страницу jsp (например cheklogin.jsp), в которой выполняется проверка и если пользователь не зарегистрирован, то forward на login.jsp. А в начале каждой другой страницы, например "welcome.jsp", включать эту страницу: <%@include file="cheklogin.jsp"%>. В этом варианте удобно использовать один бин на всю сессию, в котором содержится и имя пользователя, пароль и метод проверки. Удобно также использовать и JSF, для использования этого бина и полей ввода имени пользователя и пароля. Но как вызвать метод проверки и сделать forward на "login.jsp" в случае неудачи, только средствами JSF я не понимаю. Если использовать теги JSTL и обычного JSP, то получаются проблемы с бином в тегах JSF. Вобщем со всех сторон возникают какие-то проблемы :(.
...
Рейтинг: 0 / 0
Навигация с помощью JSF
    #34295821
Sah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверку аутентификации можно реализовать в фильтре.

При первом логине класть UserId в Session Bean. В фильтре проверять, если UserId установлен, то ничего не делаем, если не установлен - делаем редирект на Login page
...
Рейтинг: 0 / 0
Навигация с помощью JSF
    #34296019
yanich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я понимаю, вам нужна не столько навигация, а аутентификация - а проблема аутентификации и авторизации уже поднималась тут. Посмотри, может это именно то, что Вам нужно.
...
Рейтинг: 0 / 0
Навигация с помощью JSF
    #34297797
PassingBy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sh_uraУ меня была идея создать одно место проверки доступа. А навигацией решается только доступ с конкретной jsp страницы. Например, если в браузере кто то наберет сразу "welcome.jsp", то каким образом с помощью правил навигации перевести его на страницу "login.jsp", если пользователь еще не зарегистрирован?
А можно было бы cделать отдельную страницу jsp (например cheklogin.jsp), в которой выполняется проверка и если пользователь не зарегистрирован, то forward на login.jsp. А в начале каждой другой страницы, например "welcome.jsp", включать эту страницу: <%@include file="cheklogin.jsp"%>. В этом варианте удобно использовать один бин на всю сессию, в котором содержится и имя пользователя, пароль и метод проверки. Удобно также использовать и JSF, для использования этого бина и полей ввода имени пользователя и пароля. Но как вызвать метод проверки и сделать forward на "login.jsp" в случае неудачи, только средствами JSF я не понимаю. Если использовать теги JSTL и обычного JSP, то получаются проблемы с бином в тегах JSF. Вобщем со всех сторон возникают какие-то проблемы :(.

Вообще, если Вы используете JSF, то в браузере надо указывать не welcome.jsp, а welcome.faces, или на что там FacesServlet маппится. Далее, теги JSTL и JSF мешать крайне не рекомендуется - контексты разные. Если все же очень хочется, то facelets в помощь. Ну и насчет общей проверки доступа - можно не изобретать велосипед, а использовать стандартный JAAS - вот так . Или так еще
...
Рейтинг: 0 / 0
Навигация с помощью JSF
    #34299245
maod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тут еще такой вопрос может возникнуть - если кто-то зайдет на какую-нибудь страницу (не welcome) напрямую по ссылке, будет ли проверяться аутентификация? Тут либо писать код проверки на каждой странице :(, либо действительно писать фильтр.
...
Рейтинг: 0 / 0
Навигация с помощью JSF
    #34300676
PassingBy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maodТут еще такой вопрос может возникнуть - если кто-то зайдет на какую-нибудь страницу (не welcome) напрямую по ссылке, будет ли проверяться аутентификация? Тут либо писать код проверки на каждой странице :(, либо действительно писать фильтр.

На самом деле, ни то, ни другое не требуется. Посмотрите цикл JSF. Из фильтра зацепить FacesContext, конечно, можно, но это не очень здорово. Правильнее написать свой листенер и в нем перед отработкой фаз (например, INVOKE_APPLICATION и RENDER_RESPONSE) проверять наличие некоей переменной контекста, которая будет выставлена при аутентификации (естественно, ее область должна быть SESSION). Но все это нужно, если нравится вручную Солнце закатывать.
...
Рейтинг: 0 / 0
Навигация с помощью JSF
    #34307069
nonsense_name
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скажите, а как мне прикрутить такой листенер на вызов каждой страницы faces? крайне надо сделать какой-то фильтр, чтобы, если это не логинская страница, отправлять на оную.
Не дружу пока с фазами faces :(
...
Рейтинг: 0 / 0
Навигация с помощью JSF
    #34314342
PassingBy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там же в начале статьи написано. Прописать в любом файле с конфигурацией JSF:

Код: plaintext
1.
2.
3.
4.
5.
<application>
  <action-listener>
    com.jsfcompref.examplecomponents.util.JAASActionListener
  </action-listener>
</application>

Он декорирует вызовы листенера, установленного ранее.
...
Рейтинг: 0 / 0
Навигация с помощью JSF
    #34315252
nonsense_name
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сори, если глупый вопрос Но.

0. любой файл конфигурации - это faces-config.xml?

1.что этот листенер должен наследовать\имплементить? и какие методы у него должны отвечать за какую фазу JSF? их же несколько? пример просто обрезан. Подскажешь?
...
Рейтинг: 0 / 0
Навигация с помощью JSF
    #34315259
nonsense_name
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
0 вопрос снят. 1 вопрос остается
...
Рейтинг: 0 / 0
Навигация с помощью JSF
    #34317607
PassingBy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имплементирует это дело, очевидно, ActionListener: javadoc тут

Какая фаза? В этом примере явная разборка приходящего события не идет, поэтому
листенер перехватит любое событие, но только на странице логина. Для перенаправления на нее надо писать PhaseListener, и вот там указать фазу явно. Цепляться, видимо, надо за фазу Restore View. Кстати, все примеры из книжки этого товарища лежат тут .
...
Рейтинг: 0 / 0
Навигация с помощью JSF
    #34323357
nonsense_name
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, почитаю :)
...
Рейтинг: 0 / 0
Навигация с помощью JSF
    #34323365
nonsense_name
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А нет ли ссылки на саму книжку этого товарища? Думаю, там много интересного.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Навигация с помощью JSF
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]