我正在开发一个安全的 Web 应用程序。我必须开发一个 servlet 来自定义控制它的访问。
例如,我打开了 home.jsp,一个依赖于 URL 模式的 content.jsp。
如果它是 GET content.jsp,它应该是敞开的以显示内容列表。如果是content.jsp?chapter=1&detail=true,它应该检查用户是否登录,只有当用户有正确的访问权限时,才会授予权限,否则,将其重定向到登录页面。
我对 Java 中的 JSESSIONID 管理感到困惑。默认情况下,如果没有会话,任何 JSP 都会自动创建会话。我知道我可以使用 @page session="false" 覆盖其默认行为。
所以,我猜逻辑会是这样的
如果用户(尚未登录)GET home.jsp,我不应该在 servlet 中创建任何会话。但是 JSP 应该创建一个。我在 HTTP 请求标头中发现,它发送了 JSESSIONID 值。但是,为什么在服务器端,我不会通过 httpServletRequest.getSession(false) 获得任何会话?
如果用户想要获取 content.jsp?chapter=1&detail=true,我会将其重定向到 logon.jsp。提交登录表单后,我是否应该使用 httpServletRequest.getSession(true) 在服务器端(返回之前)创建一个新会话?任何以下 JSP 页面访问都会创建一个新会话吗?
当用户注销时,我必须调用 session.invalidate() 使其无效。但是,任何后续的 JSP 页面都会创建一个新的会话 ID 吗?
我只是困惑
When should I call getSession(true) and getSession(false)? I assume per user session, I should call getSession(true) once.
Which session id should I use (trust) to identify if the user is truly logged on?
谢谢。