如何解决HttpServletRequest获得新会话
我有一个通过oauth进行身份验证的应用程序。
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException,ServletException {
HttpServletRequest httpReq = (HttpServletRequest) request;
HttpServletResponse httpResp = (HttpServletResponse) response;
// Check if already logged in
if (getUser(httpReq) != null) {
chain.doFilter(request,response);
return;
}
// Try to parse auth response
if (procAuthResponse(httpReq)) {
chain.doFilter(request,response);
return;
}
// Go to auth server
sendAuthRequest(httpReq,httpResp);
}
这很好。 在procAuthResponse方法中,我正在解析服务器的响应并对此进行响应。
HttpSession session = request.getSession();
session.setAttribute(USER_PRINCIPLE_ATR,userInfo);
它也可以很好地工作,但是有一个使用getCurrent user方法的会话范围的类,该类由servlet使用。
public UserInfo getCurrentUser() {
HttpSession session = getHttpSession();
if (session == null) {
LOG.warn("Method getCurrentUser: unable to find a session");
return null;
}
Object user = session.getAttribute(OAuthLoginFilter.USER_PRINCIPLE_ATR);
if (!(user instanceof UserInfo)) {
LOG.warn(String.format("Method getCurrentUser,wrong type for attribute %s",OAuthLoginFilter.USER_PRINCIPLE_ATR));
return null;
}
currentUser = (UserInfo) user;
return currentUser;
}
该方法被多次调用,结果表明,在第一次调用时,所有操作均按预期进行,然后,getHttpSession()返回不包含在过滤器类中设置的任何信息的另一个会话。每次都不是新会话,没有所需信息的会话总是相同的。
getHttpSession()的代码
private HttpSession getHttpSession() {
Object request = FacesContext.getCurrentInstance().getExternalContext().getRequest();
if (!(request instanceof HttpServletRequest)) {
LOG.warn("not a valid http request");
return null;
}
HttpServletRequest hreq = (HttpServletRequest) request;
return hreq.getSession(false);
}
你知道为什么会这样吗?
感谢您的帮助
解决方法
仍然有一个旧的过滤器类,未在web.xml中进行配置,但用@WebFilter("/*")
进行了注释。
我删除了此文件,现在一切正常。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。