Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Навигация с помощью JSF / 18 сообщений из 18, страница 1 из 1
30.01.2007, 18:46:22
    #34294077
Sh_ura
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Навигация с помощью JSF
Страница 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
30.01.2007, 19:16:51
    #34294141
crazytoo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Навигация с помощью JSF
поставьте у вашего бина 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
30.01.2007, 20:10:48
    #34294226
Sh_ura
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Навигация с помощью JSF
Частично помогло, но не полностью. Проверка производится всегда, но теряется значение полей пользователя и пароль. Например, если в 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
30.01.2007, 21:11:20
    #34294313
crazytoo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Навигация с помощью JSF
Не понимаю зачем вы вообще городите этот огород с 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
30.01.2007, 21:15:09
    #34294318
crazytoo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Навигация с помощью JSF
да совсем забыл.......
<h:commandButton value="Login" action="userparams.checkUser"/> еще надо добавить
...
Рейтинг: 0 / 0
31.01.2007, 11:00:19
    #34295227
Sh_ura
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Навигация с помощью JSF
У меня была идея создать одно место проверки доступа. А навигацией решается только доступ с конкретной 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
31.01.2007, 12:57:46
    #34295821
Sah
Sah
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Навигация с помощью JSF
Проверку аутентификации можно реализовать в фильтре.

При первом логине класть UserId в Session Bean. В фильтре проверять, если UserId установлен, то ничего не делаем, если не установлен - делаем редирект на Login page
...
Рейтинг: 0 / 0
31.01.2007, 13:36:36
    #34296019
yanich
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Навигация с помощью JSF
Насколько я понимаю, вам нужна не столько навигация, а аутентификация - а проблема аутентификации и авторизации уже поднималась тут. Посмотри, может это именно то, что Вам нужно.
...
Рейтинг: 0 / 0
01.02.2007, 02:22:19
    #34297797
PassingBy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Навигация с помощью JSF
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
01.02.2007, 14:21:02
    #34299245
maod
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Навигация с помощью JSF
Тут еще такой вопрос может возникнуть - если кто-то зайдет на какую-нибудь страницу (не welcome) напрямую по ссылке, будет ли проверяться аутентификация? Тут либо писать код проверки на каждой странице :(, либо действительно писать фильтр.
...
Рейтинг: 0 / 0
02.02.2007, 01:07:20
    #34300676
PassingBy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Навигация с помощью JSF
maodТут еще такой вопрос может возникнуть - если кто-то зайдет на какую-нибудь страницу (не welcome) напрямую по ссылке, будет ли проверяться аутентификация? Тут либо писать код проверки на каждой странице :(, либо действительно писать фильтр.

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

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

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

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

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

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


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