мое отображение сервлета испортит мой фильтр

1

В моей программе любой URL-адрес в виде /Controller/* перенаправляется путем сопоставления сервлета в класс Controller.

Я попытался добавить фильтр для авторизации, если пользователь не вошел в систему, а путь - нет /Controller/RegForm перенаправляет его на /Controller/RegForm.

Проблема в том, что отображение сервлета перенаправляется на /Controller, фильтр всегда получает /Controller как путь.

Как использовать фильтр и отображение сервлетов?

Это мой web.xml:

<filter>
    <filter-name>AuthFilter</filter-name>
    <filter-class>AuthFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>AuthFilter</filter-name>
    <url-pattern>/Controller/*</url-pattern>
</filter-mapping> 
 <servlet>
    <servlet-name>Controller</servlet-name>
    <servlet-class>Controller</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>Controller</servlet-name>
    <url-pattern>/Controller/*</url-pattern>
</servlet-mapping>

<session-config>
    <session-timeout>
        30
    </session-timeout>
</session-config>

мой фильтр:

@WebFilter("/Controller/*")
public class AuthFilter 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);
    String path = ((HttpServletRequest) request).getServletPath();

    if ((session != null && session.getAttribute("student") != null )||(excludeFromFilter(path))) {
            chain.doFilter(req, res); // Log 
        }
     else {
        response.sendRedirect("/registration-war/Controller/RegForm"); // No logged-in user found, so redirect to login page.
    }
}

private boolean excludeFromFilter(String path) {
    if (path.equals("/Controller/RegForm")) {
        return true; // add more page to exclude here
    } else {
        return false;
    }
}
  • 0
    Можете ли вы показать нам реализацию вашего фильтра?
  • 0
    отредактировал пост
Теги:
servlets
filter
mapping

1 ответ

1
Лучший ответ

Вы используете HttpServletRequest.getServletPath() который возвращает URL-адрес сервлета, который (согласно вашему отображению сервлета) "/Controller".

Вы хотите, чтобы информация о пути не была сервлета:

Возвращает любую дополнительную информацию о пути, связанную с URL-адресом, отправленным клиентом при его выполнении. Дополнительная информация о пути следует по пути сервлета, но предшествует строке запроса и начинается с символа "/".

Так, например, это вернет "/RegForm" если ваш пользователь запросит страницу /Controller/RegForm.

String pathInfo = HttpServletRequest.getPathInfo();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню