【问题标题】:Create http session in filter在过滤器中创建 http 会话
【发布时间】:2014-07-02 17:36:06
【问题描述】:

我的 xhtml 网页是使用一个简单的请求从外部系统调用的,我想检查用户名 - 从请求中给出 - 是否有效,如果有效,他想进入主页,而不是他被重定向到外部系统。我创建了一个过滤器来获取请求:

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    HttpServletRequest req = (HttpServletRequest) request;
    HttpServletResponse res = (HttpServletResponse) response;


    // skip the resources library
    if (!req.getRequestURI().startsWith(req.getContextPath() + ResourceHandler.RESOURCE_IDENTIFIER)) {
        res.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP
                                                                                // 1.1.
        res.setHeader("Pragma", "no-cache"); // HTTP 1.0.
        res.setDateHeader("Expires", 0); // Proxies.
    }

    Object attr = req.getParameter("user");
    String language = (String) req.getParameter("language");

    if (attr != null && language != null) {
        // check user in db
        String userAdmin = (String) attr;

        ResultStatus result = myDao.findUser(userAdmin);
        if (result.getStatus().equals(ResponseStatus.SUCCESS)) {
            // User is logged in, so just continue request.
            User user = new User();
            user.setAccountId(result.getAccount().getAccountId());



            chain.doFilter(req, res);
        } else {
            // User is not logged in, so redirect to index.
            res.sendRedirect(req.getContextPath() + "/test.xhtml");
        }
    } else {
        // User is not logged in, so redirect to index.
        res.sendRedirect(req.getContextPath() + "/test.xhtml");
    }
}

如果他是有效用户,我需要在过滤器中为该用户创建会话,这样我就可以在任何后台 bean 上获取用户对象。

【问题讨论】:

  • 您可以访问req 变量中的请求,只需调用req.getSession,您将获得HttpSession 来存储/恢复/使用户无效。
  • 我做了这个req.getSession().setAttribute(USER_TOKEN, newUser); 来设置用户和这个FacesContext facesContext = FacesContext.getCurrentInstance(); HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(true); User flag = (User) session.getAttribute(USER_TOKEN); 来获取它在烘焙豆上,对吗??
  • 您不需要在 Servlet 过滤器中使用 FacesContext
  • 我会简单地说:JSF 与您的问题无关。使用普通的HttpServletRequestHttpSession 来处理这个问题。

标签: java httpsession


【解决方案1】:

要设置它,只需这样做:

req.getSession().getServletContext().setAttribute(LoginFilter.USER_KEY, user);
                    chain.doFilter(req, res);

得到它:

FacesContext facesContext = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest) facesContext.getExternalContext().getRequest();
User user = (User) request.getSession().getServletContext().getAttribute(LoginFilter.USER_KEY);

【讨论】:

    猜你喜欢
    • 2012-04-13
    • 2012-04-10
    • 1970-01-01
    • 2015-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-14
    • 1970-01-01
    相关资源
    最近更新 更多