2009-12-13 2 views
0

Я новичок в сервлетах и ​​jsps. Я хотел знать, какой лучший дизайн будет для пробной проблемы, на которую я пытаюсь написать код. Здесь идет речь -Вопрос дизайна - сервлеты, jsps, пользовательские теги, html

Я хочу создать веб-сайт (www.example.com), который просто перечисляет историю входа каждого пользователя (а не любую функцию, которую хочет любой, но просто пример для одного).

Итак, здесь есть два URL-адреса: /index.jsp и/login (Предположим, что все регистрации выполнены).

index.jsp покажет все прошлые логины для этого пользователя. Но для этого мне нужно определить, был ли пользователь уже зарегистрирован или нет. Если пользователь уже вошел в систему, я показываю ему свою историю, иначе я должен переслать его на страницу входа автоматически.

Я уже написал пользовательский криптографически сильный файл cookie, который скажет мне, был ли пользователь зарегистрирован или нет. Поэтому, если файл cookie отправлен мне, я могу проверить, прошел ли он проверку подлинности или срок действия файла cookie/сессии или нет. Это не проблема.

У меня проблема с дизайном: как следует вызывать проверку класса Java для аутентификации? Я использую пользовательские теги jsp для проверки этого и переписывания страницы? Я хочу, чтобы класс легко для моих html-разработчиков использовать при создании новых страниц. Каков наилучший способ сделать это?

Я думаю, что мой вопрос скорее связан с правильным использованием java-кода в jsps и/или может быть пользовательскими библиотеками тегов. Пожалуйста, не стесняйтесь продолжать долго, как вы хотите :)

Спасибо за чтение.

  • Vas

ответ

2

Вы можете использовать Filter для этого. Таким образом, вы можете хранить логику кода в одном месте без необходимости излишне копировать один и тот же код поверх всех страниц JSP, а также поддерживать JSP красиво scriptlet -бесплатно.

Вместо того чтобы повторно изобретать сеанс, создавая файл cookie самостоятельно, вы также можете просто использовать Java EE, предоставляемый API HttpSession. Это в основном уже поддерживается файлом cookie, и вы можете хранить объекты Java в сеансе как атрибуты, чтобы они оставались доступными для всего сеанса пользователя.

На входе просто поставить User объект в HttpSession:

User user = userDAO.find(username, password); 
if (user != null) { 
    request.getSession().setAttribute("user", user); 
} else { 
    // Show error. 
} 

Чтобы проверить, если пользователь вошел в систему, используйте Filter. Реализовать метод doFilter() следующим образом:

if (((HttpServletRequest) request).getSession().getAttribute("user") != null) { 
    chain.doFilter(request, response); // User is logged in, just continue with request. 
} else { 
    ((HttpServletResponse) response).sendRedirect("login"); // Not logged in, redirect to login page. 
} 

и отобразить его на url-pattern как /secured, /restricted, /users или около того. Поместите незавершенные JSP-страницы в одну и ту же папку в webcontent.

Чтобы выйти из-пользователя, просто удалите его из сессии:

request.getSession().removeAttribute("user"); 

// Or, more drastically, invalidate the entire session: 
request.getSession().invalidate(); 

Тем не менее, Java EE уже обеспечивает декларативный (на основе XML-конфигурации) контейнер управление безопасностью, вы можете найти учебник об этом here. Вы можете использовать его, но если вы хотите, чтобы ваше приложение перехватывало незаметно логины, управляемые контейнером, чтобы, например, хранить обзор истории входа в систему, вам все равно необходимо создать Filter. Например:

HttpServletRequest httpRequest = (HttpServletRequest) request; 
UserPrincipal user = httpRequest.getUserPrincipal(); 
HttpSession session = httpRequest.getSession(); 
if (user != null && session.getAttribute("user") == null) { 
    session.setAttribute("user", user); 

    // First-time login. You can do your intercepting thing here. 
} 
chain.doFilter(request, response); 
+0

Спасибо. До сих пор я не знал об фильтрах. Я кратко взглянул на них. Они выглядят так, как мне нужно. Правильно ли я говорю, что фильтры должны использоваться для определения логики в JSP и пользовательских тегах для связанных с пользовательским интерфейсом таких вещей, как получение имени пользователя, местоположения и т. Д.? – user220201

+0

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

Смежные вопросы