jspを表示する前に、ログインしているユーザーのために、いくつかのサーブレットとjspの間にフィルターを追加しようとしています。問題は、ログイン ページに転送されたブラウザの URL を取得しようとしているのですが、方法がわかりません。Filter で URI を取得し、それをリクエストの属性としてConnexion サーブレットに送信しようとしましたが、うまくいきません。
私の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 {
}
}
私の接続サーブレット
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>