Filtry w Jee 6 działają tylko przy bezpośredin wejściu na st

0

Witam ponownie :)

Jako, że zrezygnowałem z JDBCRealm postanowiłem przerzucić się na mechanizm filtrów. I tak, znowu pojawiły się problemy. Otóż mam prosty filtr:

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    HttpServletRequest myRequest = (HttpServletRequest) request;
    HttpServletResponse myResponse = (HttpServletResponse) response;
    HttpSession session = myRequest.getSession(false);
    User user = (User) session.getAttribute("userObject");
    String accessRights= user.getGr();
    if (!accessRights.equals("ADMIN")) {
       myResponse.sendRedirect("/WebSecurityTest-war/faces/login.jsp");
    } else {
       chain.doFilter(request, response);
    }
}

który sprawdza pole gr w obiekcie User przekazanym do sesji podczas logowania:

      session = request.getSession(true);
        session.setAttribute("userObject", userObject);

W skrócie, gdy na zabezpieczoną stronę wejdę korzystając z f-c.xml, bądź poprzez przekierowanie bezpośrednie - aplikacja w ogóle nie przechodzi przez filtr. Jednak, gdy wpisze adres tej strony bezpośrednio w pasku adresu przeglądarki filtr zadziała bezbłędnie. I tutaj jestem w kropce, jak rozwiązać ten problem. A i jeszcze mapowanie filtrów z web.xml

<filter>
    <filter-name>AdminFilter</filter-name>
    <filter-class>kkp.filters.AdminFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>AdminFilter</filter-name>
    <url-pattern>/faces/members/admin/*</url-pattern>
 <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>INCLUDE</dispatcher>
        <dispatcher>ERROR</dispatcher>
</filter-mapping>

Z góry dziękuje za pomoc :)

P.S. Jeżeli ktoś dysponuje jakimś fajnym tutorialem dotyczącym filtrów, będę bardzo wdzięczny za udostępnienie.

0

W filter-mapping jest element o nazwie dispatcher. Domyslnie ma wartosc REQUEST, czyli filtr jest tylko uruchamiany na request na bezposrerni URL, czyli to co zauwazasz. Musisz dodac inne, jak np FORWARD czy ERROR, juz sobie doczytaj.

W samym filtrze masz blad, mozesz dostac NPE gdy user sie nie zalogowal - pobierasz sesje getSession(false), ktore to wywolanie moze zwrocic null, i dalej na dziko bez sprawdzania uruchamiasz na sesji getAttribute().

I prawa dostepu to sa 'access rights', nie 'laws'.

0

Zadaje sobie sprawę że ten filtr zawiera błędy, chciałem po prostu sprawdzić zasadę działania filtrów. Aktualną wersje można nazwać preAlpha.

Wracając do tematu

        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>INCLUDE</dispatcher>
        <dispatcher>ERROR</dispatcher>

nie rozwiązało problemu niestety.

a laws użyłem z lenistwa, to jednak parę znaków mniej ;) już poprawione

edit II

dodanie dispatcher-ów oraz zmiana url-pattern rozwiązały problem.

Dzięki ::.

Temat można zamknąć</url>

1 użytkowników online, w tym zalogowanych: 0, gości: 1