LoginFilter nie działa.

LoginFilter nie działa.
O1
  • Rejestracja: dni
  • Ostatnio: dni
0

Witam. Mam filtr, który ma za zadanie sprawdzić sesję użytkownika. Jeśli wygasła ma nas przekierować na stronę home.xhtml:

Filtr:

Kopiuj
public class FilterLogin implements Filter{

        FilterConfig fc;

        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
            fc = filterConfig;
        }

        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.

            HttpServletRequest req = (HttpServletRequest) request;
            HttpServletResponse resp = (HttpServletResponse) response;
            HttpSession session = req.getSession(true);

            if (session.getAttribute("loginMB") == null) {
                String contextPath = ((HttpServletRequest)request).getContextPath();
                System.out.println(contextPath + "/home.xhtml");
                resp.sendRedirect(contextPath + "/home.xhtml");
            } else {
                chain.doFilter(request, response);
            }  
        }

        @Override
        public void destroy() {
            //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }

    }

web.xml:

Kopiuj
 <filter>
    <filter-name>filter</filter-name>
    <filter-class>pl.project.filter.FilterLogin</filter-class>
</filter>
<filter-mapping>
    <filter-name>filter</filter-name>
    <url-pattern>/protected/*</url-pattern>
</filter-mapping>

Niestety

Kopiuj
resp.sendRedirect(contextPath + "/home.xhtml");

nie przekierowuje mnie na stronę w momencie wygaśnięcia. Kiedy próbuję po wygaśnięciu sesji nawigować po stornie, to nie ma żadnej rekacji. Cały czas zostaję na tej samej stronie i nie mogę nic zrobić, a powinienem zostać w takim wypadku zostać przekierowany na home.xhtml.

Na pewno wchodzę w ifa, ponieważ w warunku

Kopiuj
(session.getAttribute("loginMB") == null)

dałem System.out.println(contextPath + "/home.xhtml");

Kopiuj
 i wypisuje mi to w logach serwera, ale potem ten resp nie działa najwyraźniej: <code class="java"><code class="java">resp.sendRedirect(contextPath + "/home.xhtml");
Koziołek
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Stacktrace
  • Postów: 6822
0
Kopiuj
response.setStatus(HttpServletResponse. SC_MOVED_TEMPORARILY);
response.setHeader("Location", "http://somewhere/");

SC_MOVED_TEMPORARILY zwraca HTTP 302

O1
  • Rejestracja: dni
  • Ostatnio: dni
0

Dodałem to do filtra, ale efekt nadal jest taki sam.

Kopiuj
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
         
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse resp = (HttpServletResponse) response;
        HttpSession session = req.getSession(true);
        
        if (session.getAttribute("loginMB") == null) {
            String contextPath = ((HttpServletRequest)request).getContextPath();
            System.out.println("wwwww");
            resp.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY);
            resp.setHeader("Location", "/home.xhtml");
        } else {
            chain.doFilter(request, response);
        }  
    }
O1
  • Rejestracja: dni
  • Ostatnio: dni
0

Edit: Do usunięcia problem rozwiązany.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.