Java Servlet从一个Servlet重定向到另一个Servlet,然后再返回到初始Servlet

时间:2011-10-16 04:33:37

标签: java servlets redirect web

我有一个关于Java Servlets的问题。

让我说我在servlet网页上,'somePage'。我想登录(使用另一个servlet,'登录'servlet)。所以我点击'somePage'上的登录链接,然后重定向到'登录'页面。我输入我的姓名和密码,他们都是正确的。登录页面已成功登录。

(现在询问有关'登录'servlet的编码)如何编写“登录”页面以便将成功登录的人重定向回“somePage”网页?

主要问题:登录页面如何知道最初重定向到的页面是“somePage”页面?

我已经删除了很多请求参数,但是没有告诉我,是的,你是从页面引导的,'somePage'。这些是我看过的参数:

String authType = request.getAuthType();
String pathInfo = request.getPathInfo();
String pathTranslated = request.getPathTranslated();
String getUserName = request.getRemoteUser();
String remoteAdd = request.getRemoteAddr();
String uriString = request.getRequestURI();
String sessionID = request.getRequestedSessionId();
String serverName = request.getServerName();
Integer serverPort = request.getServerPort();
String servletPath = request.getServletPath();

我知道其中一些是不会给我正在寻找的答案,但我认为其中一个HttpServletRequest参数必须告诉登录页面谁要求显示它。任何帮助将不胜感激。我将继续寻找答案。我试图搜索这个问题,但还没有找到答案。

2 个答案:

答案 0 :(得分:3)

相反,您应该考虑将form based authentification用于您的网络应用。

几乎每个servlet容器都支持这个。

首先,您必须配置安全性。这取决于您的应用程序服务器。即使用Jetty,您可以使用数据库方法,为用户及其角色或LDAP等提供表格。

web.xml中启用基于表单的身份验证:

<login-config>
  <auth-method>FORM</auth-method>
  <form-login-config>
    <form-login-page>/logon.jsp</form-login-page>
    <form-error-page>/logonError.jsp</form-error-page>
  </form-login-config>
 </login-config>

指定必须提供的两个JSP页面。 logon.jsp是用于插入用户名和密码的登录页面。如果用户名和密码无效,则会显示logonError.jsp

整个登录工作流程由应用程序服务器处理。

如果用户首先访问受保护的URL,则应用程序服务器会显示登录页面。作为惯例,用户名和密码的输入字段应命名为j_usernamej_password。当用户提交登录表单时,服务器检查,如果用户凭据有效(根据其配置)。如果是,则将用户重定向到原始页面。否则会显示登录错误页面。

如果您真的想自己实现它,那么您可以实现servlet filter,以便所有对受保护资源的调用都必须通过您的过滤器。 在您的过滤器中,您可以检查是否已存在会话以及用户是否已成功登录。然后可以继续正常呼叫。否则,您可以转到登录页面并将原始URL存储在会话中。成功登录后,您可以从会话上下文中读取原始URL,并重定向到用户首先想要查看的页面。

答案 1 :(得分:1)

有不同的方法可以做到这一点。一种方法是让您的登录页面支持continue CGI参数,该参数提供登录成功后要重定向的URL。另一种方法是使用传递给登录页面的“Referer”标头,并重定向到该URL。

对于前者,您可以使用ServletRequest.getParameterMap()来获取CGI参数,并确定是否存在名为continue的CGI参数(或您选择为该CGI参数指定的任何名称);对于后者,您可以使用HttpServletRequest.getHeader()来获取“Referer”标题。