Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JSP — с чего начать? 
V
    Опции темы
Stampede
Дата 14.5.2008, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 66
Всего: 144



Цитата(batigoal @  14.5.2008,  08:02 Найти цитируемый пост)
У меня Jboss в дебаг-режиме из-под иде стартует больше минуты.


Во-во, это была одной из причин, по которым я в свое время стал искать альтернативы EJB и открыл для себя светлые идеи Рода Джонсона (создателя Спринга), а позднее и все остальное: тест-дривен и аджайл девелопмент, IoP, аспекты и прочие толковые вещи.

Platon:

А у меня нет такого напряга. Я запускаю Томкат из-под Эклипсы, так что небольшие изменения в Java коде сразу видны в браузере. Бывает, правда, что система не может подхватить изменения. Ну что ж, приходится перезапускать Томкат и ждать, страшно сказать... целыч 6-7 секунд, пока он развернется smile

А тесты запускаются вообще без участия контейнера, мухой. Нажал на кнопку - и готово. Телемаркет!

Так что может тебе лучше настроить девелоперское окружение? Или подрихтовать архитектуру? Сама-то по себе Java вполне себе адекватная платформа, вопрос в том, как ее использовать.


--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
diablero
Дата 14.5.2008, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

Репутация: 2
Всего: 5



Нашел старую тему, где обсуждались различные меры защиты веб приложений.
Одной из которых, было переопределение 4хх и 5хх ошибок. У меня такой вопрос, их все перенаправлять на конкретную страницу ошибки, где в общем написанно, например, доступ запрещен или описать каждую. С одной стороны клиент не будет знать что произошло от его вредительских действий. С другой стороны клиент не сможет помочь ресурсу, т.е. сообщить вебмастеру что есть ошибка и примите меры.
З.Ы. Что за бот Ask?


--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
PM MAIL   Вверх
Maksym
Дата 14.5.2008, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 24
Всего: 62



diablero
Информацию о таких ошибках скорее нужно рассматривать не с технической точки зрения, а с точки зрения юзабилити. Вот статья об этом, к примеру.
PM MAIL   Вверх
Kangaroo
Дата 14.5.2008, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 14
Всего: 104



Цитата(Stampede @  14.5.2008,  18:25 Найти цитируемый пост)
Я запускаю Томкат из-под Эклипсы, так что небольшие изменения в Java коде сразу видны в браузере.

Аналогично, но запускается секунд 20-30...(тачка очень слабая), временами ужасно бесит.. спасают только юнит тесты  smile 


--------------------
Lost....
PM MAIL MSN   Вверх
diablero
Дата 14.5.2008, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

Репутация: 2
Всего: 5



Maksym
Спасибо, познавательно. 
Особенно порадовал стиль изложения:
Код

Для тех, кто в данный момент дислоцируется в тяжелой бронированной технике поясню

 smile 


--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
PM MAIL   Вверх
Stampede
Дата 15.5.2008, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 66
Всего: 144



Цитата(diablero @  14.5.2008,  08:40 Найти цитируемый пост)
Одной из которых, было переопределение 4хх и 5хх ошибок. У меня такой вопрос, их все перенаправлять на конкретную страницу ошибки, где в общем написанно, например, доступ запрещен или описать каждую.


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

Да, так о чем бишь я? Ах, да, что ошибки будут по большей части тривиальные, в которых и отлаживать-то нечего. Если битая ссылка на самом сайте - поправить, если с внешнего ресурса - отписать ихнему админу. А еще лучше - приделать свой механизм переадрезации (по 301) для перемещенных/удаленных страниц, и его же использовать для переправления с битых сылок.

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

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

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



--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
diablero
Дата 15.5.2008, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

Репутация: 2
Всего: 5



to Stampede
Ну в общем понятно что к чему, я определилися как все сделаю.

О мелочах, не догляделок, которых ты упоминал:
Они вскрылись сразу, стоило мне посмотреть свои логи. Там есть ошибочка в детекторах, из-за чего боты не регестрировалисьsmile
Инфа о страницах перехода с поисковиков парсится четко.

Когда перейдем к "блокировщику" ?





--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
PM MAIL   Вверх
Stampede
Дата 15.5.2008, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 66
Всего: 144



Ну хорошо, давай делать блокировщика.

По своему опыту могу сказать, что штука эта исключительно полезная: сейчас мои логи практически не засираются всякими непрошеными ботами, а раньше порядком доставали. Почему я говорю "практически" - ну, время от времени приползает что-нибудь новенькое; приходится отслеживать и добавлять в "блокиратор".

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

Проще всего обеспечить универсальность, реализовав блокиратор в виде фильтра. Отсюда вот тебе спецификация на разработку:

Класс-блокировщик нежелательного трафа

Критерии отфутболивания
  • по IP:
  • по юзер агенту

Инициализация

Получить имя файла конфига блокиратора (из параметров описания фильтра в web.xml). Предусмотреть значение по умолчанию (в директории WEB-INF/conf).

Зачитать файл, поместить списки плхих IP и агентов в память

Действия

При входящем запросе проверить источника на присутствие в плохих списках. 

Форма отлупа

Код статуса ХТТП 403 (Forbidden).


На этом пока все. В ходе реализации добавим кое-какие детали. Просю.



--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
diablero
Дата 17.5.2008, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

Репутация: 2
Всего: 5



С горяча хотел уже читать файл в ручную, как подумал,  а почему бы не использовать класс Properties. Ведь мы получаем возможность добавлять комментарии в файл, и как-то для себя идентифицировать заблокированного клиента по ключу. В итоге я получил следующее:
Код

public class BlockClientFilter implements Filter {
    private Logger logger = Logger.getLogger(Infinite.class);
    private Properties properties;
    private String DEFAULT_PATH = "/conf/blacklist.properties";

    public void init(FilterConfig filterConfig) throws ServletException {
        Infinite infinite = Infinite.getInstance();
        String homeDir = infinite.getHomeDir();

        String path = filterConfig.getInitParameter("path");
        if(path != null && path.length() != 0) {
            File file = new File(homeDir + path);
            if(!file.exists()) {
                path = DEFAULT_PATH;
                logger.error("Invalid init-param \"path\". File not found");
            }
        }
        File file = new File(homeDir + path);
        if(file.exists()) {
            try {
                properties = new Properties();
                properties.load(new FileInputStream(file));
            } catch (Exception e) {
                logger.error(e);
            }
        }
    }
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        if(properties != null) {
            HttpServletRequest request = (HttpServletRequest) servletRequest;
            HttpServletResponse response = (HttpServletResponse) servletResponse;

            String ip = request.getRemoteAddr();
            String userAgent = request.getHeader("user-agent");

            if(properties.contains(ip) || properties.contains(userAgent)) {
                response.sendError(403);
            }
        }
        filterChain.doFilter(servletRequest, servletResponse);
    }
    public void destroy() {
        properties = null;
    }
}



--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
PM MAIL   Вверх
Stampede
Дата 18.5.2008, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 66
Всего: 144



Ну что ж, diablero, неплохо.

Теперь о возможных улучшениях. Во-первых, можно предусмотреть формат с wildcards. Например, все, что начинается с Java (выкачивалки, сделанные на базе URLConnection), записать как "Java*",

Во-вторых, хотелось бы иметь болше инфы в логах сервера: кому дали отлуп, когда, на каких основаниях.

В дальнейшем можно будет приделать веб-интерфейс для добавления в черный список на ходу, без перезапуска сервера.

Ну и подумай сам, как еще можно было бы улучшить "блокиратор".



--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
Platon
Дата 19.5.2008, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 10
Всего: 40



А мне вот интересно. Мы тут запускаем цепочку фильтров
Код

filterChain.doFilter(servletRequest, servletResponse);

на сколько я понимаю, то цепочка отработает от первого фильтра до вывода странички. Правильно ли это? Может быть стоило сделать так:
Код

if(properties.contains(ip) || properties.contains(userAgent)) {
                response.sendError(403);
                return;
            }

PM MAIL ICQ   Вверх
aranea
Дата 19.5.2008, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 5.5.2008

Репутация: нет
Всего: нет



привет всем!
Буду очень благодарен если поможете.
Создаю вэб-сайт на яве, как персистенс выступает xml файл содержащий структуру сайта примерно такого содержания:

Код

<?xml version="1.0" encoding="windows-1251" standalone="yes"?>
<root>
<lab_51 title="Лаборатория 51" file="data/lab_51.txt">
  <subjects title="Тематика исследований" file="data/subjects.txt"/>
  <researchers title="Сотрудники" href="researchers.xml" />
  <articles title="Публикации" href="articles.xml" />
  <history title="История" file="data/history.txt"/>
  <projects title="Проекты" file="data/projects.txt"/>
  <seminars title="Семинар" file="data/seminars.txt">
    <description title="Общая характеристика"/>
    <organizers title="Организаторы"/>
    <info title="Информация для участников">
      <register title="Электронная регистрация"/>
      <request title="Форма заявки"/>
      <rules title="Правила оформления статей"/>
    </info>
  </seminars>
......
</lab_51>
.......
</root>


отсюда должно следовать динамическое создание меню, простота и легкость smile
вопрос в том, что при использовании конструкции #include('data/subjects.txt') Velocity ищет этот файл у себя только в папке с шаблонами. А хочется чтобы шаблоны оставались шаблонами а папка data была на одном уровне с templates. Можно содержимое ложить в контекст еще в сервлете конечно, но может кто-нибуть посоветовать что?
И вообще какие еще минусы и плюсы хранения структуры в xml?
PM MAIL WWW   Вверх
Stampede
Дата 19.5.2008, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 66
Всего: 144



Цитата(Platon @  19.5.2008,  08:56 Найти цитируемый пост)
на сколько я понимаю, то цепочка отработает от первого фильтра до вывода странички. Правильно ли это? Может быть стоило сделать так:


Молодец, Platon, верно подметил. Получи плюс за зоркий глаз smile


aranea: товарищ, вы тут не по адресу. Создайте отдельную тему и там и задайте свой вопрос.


--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
qnub
Дата 21.5.2008, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 4.5.2008

Репутация: нет
Всего: нет



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

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

Это сообщение отредактировал(а) qnub - 21.5.2008, 11:58
PM MAIL   Вверх
Stampede
Дата 21.5.2008, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 66
Всего: 144



Цитата(qnub @  20.5.2008,  23:46 Найти цитируемый пост)
увидел смысла сохранять промежуточные данные форм в сессиях в случае неправильного заполнения формы


Смысл в унификации всей логики работы с формами для разных видов форм. В основе этого решения лежит принцип, известный математикам как классическая задача о чайнике: как вскипятить воду в чайнике? Набрать воду, поставить на печку, вскипятить. Усложняем: чайник наполовину полон - как тогда? Так вот, часто оказывается, что самое простое - свести задачу к уже известной: вылить остатки и повторить для пустого.

Так и у нас с формами. В результате резко упрощается логика заполнения при ошибках валидации.


--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.1168 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.