фильтр сервлета не работает в JSP

Я пытаюсь сделать фильтр сервлета для проекта JSP в Netbeans. Что я хочу сделать, так это проверить, вошел ли пользователь в систему, если это не так, то перенаправить его на страницу входа в систему. Я следовал этому руководству:

https://stackoverflow.com/tags/servlet-filters/info

Итак, у меня есть этот java-файл в качестве моего класса Filter (имя файла — LoginFilter.java):

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@WebFilter("/app/*")
public class LoginFilter implements Filter {

@Override
public void init(FilterConfig config) throws ServletException {
    // If you have any <init-param> in web.xml, then you could get them
    // here by config.getInitParameter("name") and assign it as field.
}

@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
    HttpServletRequest request = (HttpServletRequest) req;
    HttpServletResponse response = (HttpServletResponse) res;
    HttpSession session = request.getSession(false);

    if (session == null || session.getAttribute("usuario") == null) {
        response.sendRedirect(request.getContextPath() + "/login.jsp"); // No logged-in user found, so redirect to login page.
    } else {
        chain.doFilter(req, res); // Logged-in user found, so just continue request.
    }
}

@Override
public void destroy() {
    // If you have assigned any expensive resources as field of
    // this Filter class, then you could clean/close them here.
}

}

Вот мой web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
 version="3.0">
<session-config>
    <session-timeout>
        30
    </session-timeout>
</session-config>

<filter>
    <filter-name>LoginFilter</filter-name>
    <filter-class>LoginFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/app/*</url-pattern>
</filter-mapping>

However this is not working. Could someone please tell me what I'm missing?


person Vito    schedule 01.07.2013    source источник
comment
какой URL вы используете для проверки фильтра? этот фильтр будет вызываться только тогда, когда URL-адрес содержит путь «приложение»   -  person fmodos    schedule 01.07.2013
comment
Используйте разметку annotation или web.xml и никогда не создавайте свои ТИПЫ в пакете по умолчанию.   -  person kv-prajapati    schedule 01.07.2013
comment
Мои URL-адреса выглядят так: localhost:8080/scoreBoardAPPPL/agregarEquipo.jsp   -  person Vito    schedule 01.07.2013
comment
Я попытался изменить ‹url-pattern›/app/*‹/url-pattern› на ‹url-pattern›/scoreBoardAPPPL/*‹/url-pattern›, но все равно не работает.   -  person Vito    schedule 01.07.2013
comment
Я изменил его на ‹url-pattern›/*‹/url-pattern› и теперь он работает, однако при попытке перенаправить на страницу login.jsp браузер зависает и он перенаправляет на login.jsp как в бесконечном петля. Я проверю свой код, чтобы узнать, что я могу сделать.   -  person Vito    schedule 01.07.2013
comment
Все еще есть проблемы, я попытался установить переменную сеанса usuario в файле login.jsp, но он по-прежнему равен нулю, и он продолжает вводить if вместо else. Есть идеи?   -  person Vito    schedule 01.07.2013


Ответы (1)


Мне удалось решить проблему, дело в том, что каждый раз, когда загружается страница, фильтр проверяет код, и в моем случае я нигде не объявлял свою переменную «usuario», именно эта переменная позволяет перенаправить для входа на страницу или продолжить загрузку текущей страницы. поэтому я внес изменения, чтобы установить переменную, когда пользователь входит в систему (вспомогательная страница проверяет логин, и переменная устанавливается там). Затем все остальные страницы не устанавливают переменную, они просто берут то, что было установлено при проверке входа.

Большое спасибо тем, кто ответил на комментарии.

person Vito    schedule 02.07.2013