Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Filter


Автор: trace 7.4.2006, 15:40
Всем доброго времени суток.

Не подскажете, как в doFilter фильтра определить, что пользователю возвращается 403 ошибка(Access denied)?
Нужно при возврате этой ошибки перебрасывать пользователя на страницу логина. Как перебросить,
понятно, а вот как определить, что возвращается 403? Используется JBoss 4.0.2. Приложение JSF.
Или может можно это сделать как-то другим образом(без помощи фильтра)?

Автор: Tirael 7.4.2006, 16:56
Ты можешь проверить заголовок возвращаемого сообщения.
Например так
Код

HttpServletResponse res = (HttpServletResponse)response;
if( res.containsHeader("SC_FORBIDDEN")) {
    /// делай что хочешь 
}


А полный код фильтра будет выглядеть примерно так :
Код

import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class MySuperFilter implements Filter {
    public void init(FilterConfig config) {}
    public void destroy() { }
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse res = (HttpServletResponse)response;
        if( res.containsHeader("SC_FORBIDDEN")) {
            // bla-bla-bla
        } else {
            chain.doFilter(request, response);
        }
    }
}


Больше о заголовках сообщения, и кодах ошибок ты можешь узнать, например,
тут http://www.apl.jhu.edu/~hall/java/Servlet-Tutorial/
или тут http://java.sun.com/javaee/5/docs/api/

Автор: trace 7.4.2006, 20:28
К сожалению, так не работает smile( doFilter срабатывает, а условие
Код

if( res.containsHeader ("SC_FORBIDDEN"))


не выполняется smile(
При этом 403 выдается...


Автор: sith 4.1.2008, 13:15
trace ... слушай... а кто тебе возвращает ошибку 403, я немного логики не понимаю...
... есть фильтр... он по идеи у тебя занимаеться аутентификацией, получил логин и пороль,  проверил... если нет то сразу перебросил на страницу с формой... если все окей то пусти дальше...

... какая струтура этого кусочка приложения...?

Автор: sergejzr 4.1.2008, 15:41
Nado tak:

Код

import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class MySuperFilter implements Filter {
    public void init(FilterConfig config) {}
    public void destroy() { }
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse res = (HttpServletResponse)response;
//Sperva otrabotka
        chain.doFilter(request, response);
//I tol'ko potom - proverka
        if( res.containsHeader("SC_FORBIDDEN")) {
            // bla-bla-bla
        } else {
           
        }
    }
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)