要求是登录前后JSESSIONID必须不同。
流程是login.jsp - > loginwebaction - > loginsuccess.jsp - >过滤器 - > otheraction
我的代码是
HttpSession session = request.getSession(true);
成功登录后显示Jsessionid并显示loginsuccess.jsp。但我有一些问题。
在此之后,如果我点击任何其他链接进行其他操作,则会点击过滤器。 在过滤器中,如果他已登录,我必须检查会话中的用户信息,否则必须显示错误页面。
HttpSession session = request.getSession();
if(null == session.getAttribute("USER_INFO")){
//redirect to error page
}
问题是:在过滤器中访问的会话是新的,不知道如何重新创建它。过滤器中的代码是
任何人都可以帮助我,如何进一步纠正这次会议变更?
答案 0 :(得分:1)
正如我所看到的,代码中的问题是:
HttpSession session = request.getSession();
从Servlet API开始,如果没有现有会话,request.getSession()
会创建一个新会话。您需要将其更改为:
HttpSession session = request.getSession(false);
这将确保它返回现有的会话对象(如果有效),或者如果没有会话则返回null。
要添加更多内容,以下几行代码实际上是相同的:
HttpSession session = request.getSession();
//Overloaded getSession with 'true' boolean argument
HttpSession session = request.getSession(true);
希望这有帮助。
如果这不能解决您的问题,那么问题可能就是其他问题。请添加您的用例的Skeleton代码,以便我可以尝试一下。