我为你描述的问题苦苦挣扎了一段时间......
当用户已经登录时,我尝试使用会话、请求和响应的 API 进行重定向,但是在使用 Jetty 时,用户的身份验证数据显然无法从登录页面获得。
我对 JSP 和 Jetty 完全陌生(我将它用于课堂作业),但我提出了一个运行良好的解决方案,即使认为它不是理想的解决方案。
首先,我通过在我的登录页面中添加一个变量来查看该页面是否已经加载,使用以下 JSP 做了一个小绕过:
<%
if(session.getAttribute("loginLoadedOnce") == "true")
{
response.sendRedirect("/redirect.jsp");
}
else
{
session.setAttribute("loginLoadedOnce", "true");
}
%>
这样,如果属性设置不正确,它将让用户尝试登录。否则,它将重定向到重定向页面。重定向页面将提供可用的用户数据,并且能够查看用户是否具有某些角色。
重定向页面的 JSP 代码如下:
<%
if(request.isUserInRole("admin"))
{
String url = response.encodeRedirectURL("admin/AdminPage.jsp");
response.sendRedirect(url);
}
else if(request.isUserInRole("accounting"))
{
String url = response.encodeRedirectURL("/accounting/Mainpage.jsp");
response.sendRedirect(url);
}
else
{
// Here the user has no role that we are aware of.
session.setAttribute("loginLoadedOnce", "false"); // stop redirect loop.
response.sendRedirect("/login.jsp");
}
%>
在这里,我们检查用户的角色并重定向到角色的正确页面。
就像现在一样,用户必须先注销才能返回登录页面。每个尝试返回登录页面的尝试最终都会重定向,即使使用浏览器的“返回”按钮也是如此。
希望这会对某人有所帮助。