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


Автор: kirillmana 6.10.2009, 09:59
После аутентификации пользователь должен выбрать параметр, который кладется в session.
Необходимо проверять во время загрузки jsp, если нет в session определенного атрибута, тогда редирект на страницу index.jsp (на ней происходит выбор параметра, а затем он кладется в сессию).
Подскажи, как правильно написать listener.

Автор: ivanovpv 6.10.2009, 10:22
А причем здесь Listener? При входе в JSP приписать кодик проверки значения сессионного атрибута - ну и дальше организовать ветвление на редирект или провалиться дальше в основное тело JSP.

Автор: kirillmana 6.10.2009, 10:30
Листенер тут при том, что не хотелось бы в каждой jsp проверять одно и тоже, если можно это сделать в листенере один раз

Автор: dementiev 6.10.2009, 11:21
kirillmana, скорее всего не листенер, а фильтр. Это стандартная проверка на залогиненеость) пользователя. До того, как данные попадут в сервлет, они проходят через фильтр, который берёт в сессии нужный атрибут и проверяет, залогин ли юзер. Вот те маленький пример.
Код


    <filter>
        <filter-name>CheckFilter</filter-name>
        <filter-class>CheckLoginFilter</filter-class>
        <init-param>
            <param-name>errorPage</param-name>
            <param-value>error.jsp</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>CheckFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>


Код

public class CheckLoginFilter implements javax.servlet.Filter {
    private String errorLink;
    private static final Logger logger = Logger.getLogger(CheckLoginFilter.class);

    public void init(FilterConfig filterConfig) throws ServletException {
        errorLink = filterConfig.getInitParameter("errorPage");
    }

    public void doFilter(ServletRequest request, ServletResponse response,
                         FilterChain filterChain) throws IOException, ServletException {

        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");

        HttpServletRequest httpRequest = (HttpServletRequest) request;
        HttpSession session = httpRequest.getSession();
        //String uri = httpRequest.getRequestURI();
        logger.info("type =" + session.getAttribute("type"));


        String action = httpRequest.getParameter("action");
        logger.info("action =" + action);

        if (action == null) {
            action = "next";
        }

        if ("Заказать".equals(action) || "Подать заявку".equals(action) || "Мои заявки".equals(action)) {
            if (session.getAttribute("type") == null || session.getAttribute("type").equals("admin")) {
                httpRequest.getRequestDispatcher(errorLink).forward(request, response);
                return;
            } else if (session.getAttribute("type").equals("client")) { //пользователь имеет право на просмотр страницы
                filterChain.doFilter(request, response);
                return;
            }
        }

        if ("Горячие заявки".equals(action) || "Принять".equals(action) || "Подтвердить редактирование".equals(action)) {
            if (session.getAttribute("type") == null || session.getAttribute("type").equals("client")) {
                httpRequest.getRequestDispatcher(errorLink).forward(request, response);
                return;
            } else if (session.getAttribute("type").equals("admin")) { //пользователь имеет право на просмотр страницы
                filterChain.doFilter(request, response);
                return;
            }
        }

        if ("next".equals(action)) {
            filterChain.doFilter(request, response);
        } else {
            filterChain.doFilter(request, response);
        }
    }

    public void destroy() {
    }

Автор: kirillmana 6.10.2009, 12:19
То что надо, спасибо

Автор: kirillmana 9.3.2010, 17:30
Подскажите, а можно вытащить в фильтре, с какой страницы пришел запрос?

Автор: MaxPayneC 9.3.2010, 18:11
Да, можно. 

Код

request.getHeader("referer");

Автор: koroplysov 23.5.2011, 14:25
И я подсмотрел. Полезное.

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