Possible en double:
Prevent user from going back to the previous secured page after logoutsession de Invalidation en JSP - Servlet
Je me demandais comment invalident session JSP et servlets. Sur mon site Web, une personne qui se connecte à la page de connexion, mais en cliquant sur le bouton précédent, il peut accéder à la page précédente. Je ne suis pas capable de comprendre où mettre session.invalidate()
Et plus loin où devrais-je l'invalider, sur login.jsp ou mes autres pages web quand une personne se déconnecte.
Ma classe de filtre: -
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;
import javax.servlet.annotation.WebFilter;
public class LoginFilter implements Filter{
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
HttpSession session = request.getSession(false);
if (session == null || session.getAttribute("currentSessionUser") == null) {
response.sendRedirect("Loginpage.jsp"); // No logged-in user found, so redirect to login page.
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setDateHeader("Expires", 0);
} else {
chain.doFilter(req, res); // Logged-in user found, so just continue request.
}
}
}
En web.xml j'ai écrit: -
<filter>
<filter-name>loginFilter</filter-name>
<filter-class>LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>loginFilter</filter-name>
<url-pattern>/ARMS/*</url-pattern>
</filter-mapping>
Sur mon Loginpage.jsp je viens d'écrire
<%
session.invalidate();
%>
C'est OK? Deuxièmement, je ne suis pas clair sur la structure du répertoire. Je suis en train de mettre des captures d'écran ..
J'utilise le serveur apache tomcat 5.5, donc je suppose que je ne devrais pas mettre l'annotation de modèle d'URL dans la classe de filtre non? car il est uniquement pris en charge dans Tomcat 7 et ci-dessus.
Est-ce que la session est invalidée ('session.invalidate()') lors de la déconnexion? –
@BheshGurung - J'ai écrit session.invalidate sur la page de connexion. Est-ce faux? "Déconnexion" est un lien hypertexte vers la page de connexion – Dhruv
On dirait que vous redirigez vers la page de connexion lorsque l'utilisateur clique sur le lien "Déconnexion" et que dans cette page vous invalidez la session en premier et présentez le formulaire de connexion. Si c'est le cas, alors il n'y a rien de mal avec votre code. Le problème est que votre page est mise en cache par le navigateur, ce que le navigateur affiche lorsque l'utilisateur clique sur le bouton Précédent. Pour gérer ce problème, suivez le message de BalusC ci-dessus dans le premier commentaire. –