Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Имя текущей страницы


Автор: nns2009 12.5.2010, 13:14
Создаю сайт с возможностью регистрации.
При входе/выходе очень не желательно, чтобы пользователя всегда скидывало на главную страницу, поэтому нужно знать имя(название файла в файловой системе) текущей страницы: в принципе можно прописать имя каждой страницы в её начале, но лучше будет определять его динамически.
Как?

Автор: lazycat 12.5.2010, 13:32
Как известно, JSP преобразуется в сервлет, который потом компилируется в файл класса.
В Tomcat имя класса формируется так: берется имя JSP документа и к имени добавляется постфикс "_jsp". Например, если файл был test.jsp, то класс - test_jsp, a файл класса, соответственно test_jsp.class. 
Думаю что в других серверах действуют подобные соглашения.
Ну а имя класса элементарно узнать через reflection.

Автор: nns2009 12.5.2010, 19:40
Цитата(lazycat @  12.5.2010,  13:32 Найти цитируемый пост)
Ну а имя класса элементарно узнать через reflection.

А можно код. Просто я изучаю непосредственно JSP, т.к. в остальных отношениях Java мне не очень понравился.

Автор: nns2009 13.5.2010, 13:59
Попробовал сделать в файле about_user.jsp такое: <%= this %>
Выводит: org.apache.jsp.about_005fuser_jsp@6a48e4
Перед user почему-то оказалось 005f и в общем какой-то ненадёжный, мне кажется, метод.

Есть идея объявить статическую переменную, которой будет даваться значение ещё при компиляции и это будет имя jsp файла:
<%! private static String filename = имя_файла; %>, но как определить тогда имя фалйа?

Автор: AntonSaburov 13.5.2010, 18:32
А если так - this.getClass() .getSimpleName() ?

Автор: Vasay 13.5.2010, 19:07
Цитата

При входе/выходе очень не желательно, чтобы пользователя всегда скидывало на главную страницу, поэтому нужно знать имя(название файла в файловой системе) текущей страницы



Вообще-то смысла пытаться узнать  текущий jsp нет, так как могут быть еще GET параметры, уж лучше узнавать текущий URL. 

Более оптимальный вариант - возвращать на referrer (адрес страницы, с которой был осуществлен переход на сервлет логина).


п.с. наличие любой логики в JSP, за исключением логики отображения - довольно плохой стиль программирования.

Автор: nns2009 13.5.2010, 19:52
Цитата(AntonSaburov @  13.5.2010,  18:32 Найти цитируемый пост)
А если так - this.getClass() .getSimpleName() ? 

Уже лучше, выдаёт: about_005fuser_jsp, но всё-таки 005f всё портит.
Цитата(Vasay @  13.5.2010,  19:07 Найти цитируемый пост)
Вообще-то смысла пытаться узнать  текущий jsp нет, так как могут быть еще GET параметры, уж лучше узнавать текущий URL. 

Как?
Цитата(Vasay @  13.5.2010,  19:07 Найти цитируемый пост)
Более оптимальный вариант - возвращать на referrer (адрес страницы, с которой был осуществлен переход на сервлет логина).

Я в регистрациях не разбираюсь, но пока у меня план такой: каждая страница состоит из 3 частей:
1) Вверх (подключается <%@ include file="common/top_bar.jsp" %>)
2) Лево (подключается <%@ include file="common/left_bar.jsp" %>)
3) Основная часть (у всех страниц своя)
Поля с запросом логина/пароля - в левой части(которая подключается), в этой же части проверка, не пришёл ли к нам логин/пароль из Cookies или через POST параметры. Если пришёл, то подключаемся к базе, делаем проверку и, если логин/пароль были присланы через параметры, то добавим их в Cookies.
Пока в файле common/left_bar.jsp строчка начала формы авторизации выглядит так: <form action="index.jsp" method="post"> и, если мы заходим с главной страницы, то всё нормально: были на главной, остались на главной, а если мы заходим с любой другой страницы, то получится нежелательный переход.
К сожалению, я пока не очень продвинут в серверном программировании и всё пишу в JSP файле, но в нём всё-таки есть 2 части: в одной мы делаем всю логику и выставляем значения boolean переменным, а в другой в зависимости от этих значений производим отображение.

Если у меня плохая схема, подскажите, как лучше.

Автор: Vasay 13.5.2010, 20:37
nns2009, 

Не тратьте впустую время. Почитайте вдумчиво http://forum.vingrad.ru/forum/topic-124877.html.



Цитата

делаем проверку и, если логин/пароль были присланы через параметры, то добавим их в Cookies.


Хранить логин и пароль в Cookies категорически запрещается - это дыра в безопасности вашего сайта.

Цитата

Пока в файле common/left_bar.jsp строчка начала формы авторизации выглядит так: <form action="index.jsp" method="post"> 


создаете login servlet, который принимает данные, выполняет необходимые для авторизации действия, после чего редиректит на предыдущую страницу, адрес которой берет из referer  (что-то типа request.getHeader("Referer");  )

Автор: nns2009 13.5.2010, 21:53
Цитата(Vasay @  13.5.2010,  20:37 Найти цитируемый пост)
Не тратьте впустую время. Почитайте вдумчиво сериал.

Почитаю.

Цитата(Vasay @  13.5.2010,  20:37 Найти цитируемый пост)
Хранить логин и пароль в Cookies категорически запрещается - это дыра в безопасности вашего сайта.

На серверной части логин и пароль проверяются в любом случае даже если они пришли из Cookies. (Т.е. если несколько раз обновлять страницу, то всё это время невидимо для пользователя происходит обращение к базе данных, проверка и т.п.)
Цитата(Vasay @  13.5.2010,  20:37 Найти цитируемый пост)
создаете login servlet, который принимает данные, выполняет необходимые для авторизации действия, после чего редиректит на предыдущую страницу, адрес которой берет из referer  (что-то типа request.getHeader("Referer");  ) 

А в чём смысл? Почему нельзя сделать авторизацию непосредственно на конечной странице?

Автор: Vasay 13.5.2010, 22:18
nns2009, 

Цитата

Почитаю.


Рекомендую отложить изобретение велосипеда с квадратными колесами и начать читать. 

Цитата

На серверной части логин и пароль проверяются в любом случае даже если они пришли из Cookies. (Т.е. если несколько раз обновлять страницу, то всё это время невидимо для пользователя происходит обращение к базе данных, проверка и т.п.)



пароль, такая вещь, которая вообще нигде не должна храниться, кроме как в голове пользователя (даже в базе должен лежать хэш). А Вы его в общедоступный (для любого пользователя компьютера) куки засунуть хотите, да еще и при каждом запросе гонять туда-сюда.


Цитата

 А в чём смысл? Почему нельзя сделать авторизацию непосредственно на конечной странице? 


На каждой странице?

Автор: nns2009 17.5.2010, 22:14
Цитата(Vasay @  13.5.2010,  22:18 Найти цитируемый пост)
пароль, такая вещь, которая вообще нигде не должна храниться, кроме как в голове пользователя (даже в базе должен лежать хэш). А Вы его в общедоступный (для любого пользователя компьютера) куки засунуть хотите, да еще и при каждом запросе гонять туда-сюда.

Я не совсем разбираюсь в шифровке информации, но если у злоумышленника есть доступ к моей базе данных, то у них есть доступ и к коду захода, регистрации, где хранится алгоритм кодировки, а если знаешь как зашифровано, то и расшифровать можно, тогда какая разница хранятся пароли в открытом доступе или в зашифрованном? Как же обойтись без куки я вообще не представляю, ведь они для этого и созданы.

Цитата(Vasay @  13.5.2010,  22:18 Найти цитируемый пост)
На каждой странице?

На каждой странице будет: <%@ include file="common/left_bar.jsp" %>

Я обязательно в ближайшее время начну читать, просто у меня в школе последняя неделя учёбы(9 класс), а по некоторым предметам вместо 4-ок, которые я ожидал, возможны 5-ки, придётся исправлять.

Автор: nns2009 18.5.2010, 14:01
Прочитал первые 5 страниц. Ничего не понял: кто такие логгеры и т.д.
Насколько я понял всю логику нужно выносить в отдельный сервлет и только потом передавать в JSP данные для отображения, но так и не понятно:
1) Чем хуже делать в начале каждой страницы <%! include file="common/logic.jsp" %> (единственный минус - некрасивые имена страниц(example.ru/some.jsp, вместо example.ru/some/)), чем компилировать сервлет вручную.
2) Что нужно прописать в файле web.xml, чтобы на любые запросы выполнялся 1 и тот же сервлет, который уже в зависимости от запроса покажет ту или иную страницу(или, что такой страницы нет)
3) Как обойтись без куки?

Ну и парочка вопросов чисто о Java:
1) Есть ли getters, setters(аналог в ActionScript 3.0:
Код

private var ii:int = 0
public function get i():int { return ii }
public function set i(value:int) { if (value > 0) ii = value }

)

2) Можно ли перегружать операторы, как в C++

Автор: Vasay 18.5.2010, 20:01
Цитата


Я не совсем разбираюсь в шифровке информации, но если у злоумышленника есть доступ к моей базе данных, то у них есть доступ и к коду захода, регистрации, где хранится алгоритм кодировки, а если знаешь как зашифровано, то и расшифровать можно, тогда какая разница хранятся пароли в открытом доступе или в зашифрованном?


Во первых - не факт что получив доступ к базе человек имеет доступ к коду приложения. Во вторых читаем про http://ru.wikipedia.org/wiki/Hash .

Цитата

кто такие логгеры и т.д.


Те кто ведут LOG

По всем остальным вопросам - читайте тему думайте.  Разбирайтесь в коде, который выкладывается в теме. 

По языку Java тоже что-нибудь обязательно почитайте.

Автор: nns2009 22.5.2010, 16:36
Цитата(Vasay @  18.5.2010,  20:01 Найти цитируемый пост)
Во первых - не факт что получив доступ к базе человек имеет доступ к коду приложения. Во вторых читаем про hesh .

Смысл понятен: если человек не имеет доступа к коду, то он не узнает пароль, но если у него есть доступ к коду, то для восстановления пароля из базы данных он всего-лишь выполняет обратные действия: Предположим, что наши пароли целочисленные, пользователь вводит при регистрации пароль 12345, который помещается в таблицу в виде хеша: ((12345 * 3) - 1000) * 2 = 72070, злоумышленник же: (72070 / 2 + 1000) / 3 = 12345.
С остальными кодами будет то же самое. Можно ли что-нибудь предпринять против этого или система хеширования разрабатывалась для первого случая?

Цитата(Vasay @  18.5.2010,  20:01 Найти цитируемый пост)
Те кто ведут LOG

Кто это: пользователи или это специальные встроенные функции для упрощения регистрации/входа/выхода?

Цитата(Vasay @  18.5.2010,  20:01 Найти цитируемый пост)
По всем остальным вопросам - читайте тему думайте.  Разбирайтесь в коде, который выкладывается в теме. 

Чтение будет продолжено.

Автор: Vasay 22.5.2010, 22:41
nns2009, 
Цитата


Смысл понятен



Боюсь, все же не понятен.  Хэш - необратимое преобразование.

Автор: nns2009 25.5.2010, 20:28
Цитата(Vasay @  22.5.2010,  22:41 Найти цитируемый пост)
Боюсь, все же не понятен.  Хэш - необратимое преобразование. 

В принципе, текущий сайт я создаю скорее для тренировки, чем для реального использования и в будущем буду несколько раз переписывать с нуля, поэтому для первого раза обойдусь без хэша.

А всё-таки с теми, кто ведёт лог не понятно: кто это такой, лог?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)