
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
30.01.2007, 18:46:22
|
|||
|---|---|---|---|
|
|||
Навигация с помощью JSF |
|||
|
#18+
Страница 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=... Может в этом проблема? И как с этим бороться? Может есть другие варианты решения этой проблемы? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.01.2007, 19:16:51
|
|||
|---|---|---|---|
Навигация с помощью JSF |
|||
|
#18+
поставьте у вашего бина 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.01.2007, 20:10:48
|
|||
|---|---|---|---|
|
|||
Навигация с помощью JSF |
|||
|
#18+
Частично помогло, но не полностью. Проверка производится всегда, но теряется значение полей пользователя и пароль. Например, если в 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? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.01.2007, 21:11:20
|
|||
|---|---|---|---|
Навигация с помощью JSF |
|||
|
#18+
Не понимаю зачем вы вообще городите этот огород с 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> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.01.2007, 21:15:09
|
|||
|---|---|---|---|
Навигация с помощью JSF |
|||
|
#18+
да совсем забыл....... <h:commandButton value="Login" action="userparams.checkUser"/> еще надо добавить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
31.01.2007, 11:00:19
|
|||
|---|---|---|---|
|
|||
Навигация с помощью JSF |
|||
|
#18+
У меня была идея создать одно место проверки доступа. А навигацией решается только доступ с конкретной 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. Вобщем со всех сторон возникают какие-то проблемы :(. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
31.01.2007, 12:57:46
|
|||
|---|---|---|---|
Навигация с помощью JSF |
|||
|
#18+
Проверку аутентификации можно реализовать в фильтре. При первом логине класть UserId в Session Bean. В фильтре проверять, если UserId установлен, то ничего не делаем, если не установлен - делаем редирект на Login page ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
31.01.2007, 13:36:36
|
|||
|---|---|---|---|
Навигация с помощью JSF |
|||
|
#18+
Насколько я понимаю, вам нужна не столько навигация, а аутентификация - а проблема аутентификации и авторизации уже поднималась тут. Посмотри, может это именно то, что Вам нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
01.02.2007, 02:22:19
|
|||
|---|---|---|---|
Навигация с помощью JSF |
|||
|
#18+
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 - вот так . Или так еще ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
01.02.2007, 14:21:02
|
|||
|---|---|---|---|
|
|||
Навигация с помощью JSF |
|||
|
#18+
Тут еще такой вопрос может возникнуть - если кто-то зайдет на какую-нибудь страницу (не welcome) напрямую по ссылке, будет ли проверяться аутентификация? Тут либо писать код проверки на каждой странице :(, либо действительно писать фильтр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
02.02.2007, 01:07:20
|
|||
|---|---|---|---|
Навигация с помощью JSF |
|||
|
#18+
maodТут еще такой вопрос может возникнуть - если кто-то зайдет на какую-нибудь страницу (не welcome) напрямую по ссылке, будет ли проверяться аутентификация? Тут либо писать код проверки на каждой странице :(, либо действительно писать фильтр. На самом деле, ни то, ни другое не требуется. Посмотрите цикл JSF. Из фильтра зацепить FacesContext, конечно, можно, но это не очень здорово. Правильнее написать свой листенер и в нем перед отработкой фаз (например, INVOKE_APPLICATION и RENDER_RESPONSE) проверять наличие некоей переменной контекста, которая будет выставлена при аутентификации (естественно, ее область должна быть SESSION). Но все это нужно, если нравится вручную Солнце закатывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
05.02.2007, 16:39:50
|
|||
|---|---|---|---|
|
|||
Навигация с помощью JSF |
|||
|
#18+
Скажите, а как мне прикрутить такой листенер на вызов каждой страницы faces? крайне надо сделать какой-то фильтр, чтобы, если это не логинская страница, отправлять на оную. Не дружу пока с фазами faces :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.02.2007, 00:16:12
|
|||
|---|---|---|---|
Навигация с помощью JSF |
|||
|
#18+
Там же в начале статьи написано. Прописать в любом файле с конфигурацией JSF: Код: plaintext 1. 2. 3. 4. 5. Он декорирует вызовы листенера, установленного ранее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.02.2007, 12:04:26
|
|||
|---|---|---|---|
|
|||
Навигация с помощью JSF |
|||
|
#18+
сори, если глупый вопрос Но. 0. любой файл конфигурации - это faces-config.xml? 1.что этот листенер должен наследовать\имплементить? и какие методы у него должны отвечать за какую фазу JSF? их же несколько? пример просто обрезан. Подскажешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.02.2007, 12:05:28
|
|||
|---|---|---|---|
|
|||
Навигация с помощью JSF |
|||
|
#18+
0 вопрос снят. 1 вопрос остается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
09.02.2007, 00:07:49
|
|||
|---|---|---|---|
Навигация с помощью JSF |
|||
|
#18+
Имплементирует это дело, очевидно, ActionListener: javadoc тут Какая фаза? В этом примере явная разборка приходящего события не идет, поэтому листенер перехватит любое событие, но только на странице логина. Для перенаправления на нее надо писать PhaseListener, и вот там указать фазу явно. Цепляться, видимо, надо за фазу Restore View. Кстати, все примеры из книжки этого товарища лежат тут . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
12.02.2007, 12:24:18
|
|||
|---|---|---|---|
|
|||
Навигация с помощью JSF |
|||
|
#18+
Спасибо, почитаю :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=59&mobile=1&tid=2146673]: |
0ms |
get settings: |
19ms |
get forum list: |
22ms |
check forum access: |
7ms |
check topic access: |
7ms |
track hit: |
43ms |
get topic data: |
15ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
| others: | 311ms |
| total: | 490ms |

| 0 / 0 |
