2009-11-25 4 views
1

Может ли сервлет JSP, который фильтрует * .jsp (org.apache.jasper.servlet.JspServlet в Tomcat 6), каким-то образом расширить поэтому всякий раз, когда кто-то идет на страницу JSP, я могу выполнить проверку подлинности на стороне сервера, чтобы проверить, может ли пользователь просматривать страницу. Наш текущий метод - taglib в общем включении, который импортируется на каждую страницу JSP, но это не очень элегантно.Переопределение сервлета JSP (фильтр «* .jsp») для обертывания в модели аутентификации

Ключ здесь в том, что я не хочу изобретать колесо и беспокоиться о компиляции JSP в сервлеты, я бы идеально хотел делегировать в каждом методе функцию super.meth().

Я искал Google, но я не знаю, какие ключевые слова использовать. Все, что содержит JSP и Servlet, возвращает начальные уроки.

Спасибо,

Джон

ответ

3

Посмотрите на Servlet Filters и используйте этот фильтр перед пересылкой на некоторые JSP или сервлеты.

+0

Бинго, именно то, что доктор заказал. Спасибо! John – johncc

1

Вы можете не создать еще один фильтр и поставить его выше JSPServlet? Этот фильтр будет проверять ваши материалы безопасности и выполнять некоторую обработку (например, перенаправление на страницу входа), если что-то не так.

+0

Я думаю, что у него уже нет фильтра. Он просто использовал слово «фильтры» в качестве глагола, фактически говоря о JSP.;) –

+0

Вы правы - я использовал фильтры в качестве общего глагола для покрытия того, что проверяет URI. Я не понимал (или не думал) о сервлет-фильтрах! – johncc

2

Если базового auth недостаточно, возможно, Spring Security будет лучше. Это естественно, особенно если вы уже используете Spring. Одно из преимуществ заключается в том, что оно является декларативным, поэтому вы можете легко защитить URL-адреса, просто добавив их в конфигурацию безопасности.

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

3

Когда не принимая выгоды от Java EE при условии, что контейнер управления безопасностью, то нормальная базовая практикой является то, что вы храните вошедшей в User в рамках сеанса и использует Filter на желаемом url-pattern, чтобы проверить, если User регистрируется . в

Вот простой пример, чтобы получить картину:

Войти:

User user = userDAO.find(username, password); 
if (user != null) { 
    session.setAttribute("user", user); 
} else { 
    // Do your thing to show "Unknown login" error. 
} 

фильтр (который сопоставляется о п URL-шаблон, например /secured/*, /protected/*, и т.д., где в вас место ограниченные страницы JSP ожидают от страницы входа в систему):

User user = session.getAttribute("user"); 
if (user != null) { 
    chain.doFilter(request, response); // Logged in, so continue with request. 
} else { 
    response.sendRedirect("login"); // Not logged in, redirect to login page. 
} 

Выход:

session.removeAttribute("user"); 

// Or, a bit too drastically: 
session.invalidate(); 

Вы можете, конечно, также воспользоваться преимуществами Java EE из коробки provides в отношении безопасности. Обычно используемым способом является декларативное управление, управляемое контейнером, в котором вы можете указать пользователей и роли. Вам просто нужно объявить и <login-config> в web.xml и настроить пользовательскую область на сервере приложений. Детали зависят от используемого сервера приложений, но если это, например, Tomcat 6.0, вы можете найти here документацию об этом.

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