【问题标题】:getting url of browser获取浏览器的url
【发布时间】:2013-08-23 04:37:34
【问题描述】:

我正在尝试在显示 jsp 之前为登录的用户在一些 servlet 和 jsp 之间添加一个过滤器。问题是我正在尝试检索转发到登录页面的浏览器的 URL,但我找不到方法。我尝试在过滤器中获取 URI 并将其作为请求的属性发送到 Connexion servlet,但是它不起作用。

我的 doFilter()

package com.forum.filters;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class RestrictionFilter implements Filter {
    public static final String CONNEXION = "/WEB-INF/connexion.jsp";
    public static final String ATT_USER = "utilisateur";
    public static final String CHEMIN = "chemin";

    public void destroy() {

    }

    public void doFilter(ServletRequest req, ServletResponse res,
            FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;

        String chemin = request.getRequestURI().substring(
                request.getContextPath().length());

        HttpSession session = request.getSession();

        if (session.getAttribute(ATT_USER) == null) {
            request.setAttribute(CHEMIN, chemin);
            request.getRequestDispatcher(CONNEXION).forward(request, response);
        } else {
            chain.doFilter(request, response);
        }
    }

    public void init(FilterConfig fConfig) throws ServletException {

    }

}

我的 Connexion servlet

package com.forum.servlets;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.forum.beans.Utilisateur;
import com.forum.form.ConnexionForm;

public class Connexion extends HttpServlet {
    public static final String ATT_USER = "utilisateur";
    public static final String ATT_FORM = "form";
    public static final String VUE = "/WEB-INF/connexion.jsp";

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        this.getServletContext().getRequestDispatcher(VUE)
                .forward(request, response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        ConnexionForm form = new ConnexionForm();
        String chemin = (String) request.getAttribute("chemin");

        Utilisateur utilisateur = form.connecterUtilisateur(request);

        HttpSession session = request.getSession();

        if (form.getErreurs().isEmpty()) {
            session.setAttribute(ATT_USER, utilisateur);
            if (chemin == null || chemin.startsWith("/connexion"))
                response.sendRedirect("/projetForum/forum");
            else
                response.sendRedirect("/projetForum" + chemin);
        } else {
            request.setAttribute(ATT_USER, null);
            request.setAttribute(ATT_FORM, form);
            this.getServletContext().getRequestDispatcher(VUE)
                    .forward(request, response);
        }
    }
}

web.xml的一些标签

 <servlet>
 <servlet-name>Connexion</servlet-name>
 <servlet-class>com.forum.servlets.Connexion</servlet-class>
 </servlet>
 <servlet-mapping>
 <servlet-name>Connexion</servlet-name>
 <url-pattern>/connexion</url-pattern>
</servlet-mapping>
<filter>
     <filter-name>RestrictionFilter</filter-name>
     <filter-class>com.forum.filters.RestrictionFilter</filter-class>
</filter>
<filter-mapping>
     <filter-name>RestrictionFilter</filter-name>
     <servlet-name>Nouveau</servlet-name>
     <servlet-name>Profil</servlet-name>
     <servlet-name>Editer</servlet-name>
     <servlet-name>Repondre</servlet-name>
</filter-mapping>

【问题讨论】:

  • 我无法理解您的问题:我正在尝试检索将他转发到登录页面的浏览器的 URL,但我现在可以得到任何地方
  • 抱歉,我已经更新了我的帖子。我希望这更容易理解。

标签: jsp jakarta-ee servlets servlet-filters


【解决方案1】:

我从您的过滤器中看到,在您将其发送到登录页面之前,您已经使用 request.setAttribute(CHEMIN, chemin); 存储了引荐来源网址。在这种情况下,在您的登录 jsp(我假设这是 /WEB-INF/connexion.jsp)上,您可以将其作为表单隐藏字段插入:

<form ...>
  <input type="hidden" name="referrer" value="<%= request.getAttribute("chemin") %>"/>
   ...
</form>

当表单提交时,您可以通过'referrer'请求参数来检索引荐来源网址

【讨论】:

  • 我已经测试了我设置引用 URL 的方式不起作用
  • 更新了我的答案以使用&lt;%= request.getAttribute("chemin") %&gt;。我认为如果您使用请求调度程序 EL 不会正确评估
猜你喜欢
  • 1970-01-01
  • 2017-05-10
  • 2014-12-18
  • 2014-03-24
  • 2011-09-27
  • 1970-01-01
  • 1970-01-01
  • 2010-11-18
相关资源
最近更新 更多