【发布时间】: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 与您的问题无关。使用普通的
HttpServletRequest和HttpSession来处理这个问题。
标签: java httpsession