JSP: Comment faire pour vérifier si un utilisateur est connecté?
Je suis en train d'apprendre Java pour le Web, mais j'ai quelques problèmes et j'ai besoin d'aide.
Je utiliser un modèle.jsp dans laquelle j'inclus l'en-tête.jsp, le pied de page.jsp, connexion.jsp (sur le côté gauche du modèle ) et ${param.content}.jsp
. Pour chaque page nommée X. jsp j'ai fait un autre jsp avec le contenu suivant, parce que je veux que chaque page pour avoir la même mise en page:
<jsp:include page="template.jsp">
<jsp:param name="content" value="X"/>
<jsp:param name="title" value="Start navigate"/>`enter code here`
</jsp:include>
Quand je clique sur l'Examen du lien,par exemple, je veux être rediriger vers d'Examen.jsp, mais j'ai quelques problèmes.
Dans le pied de page.jsp j'ai quelque chose comme ceci:
(...)
< a href =" Review.jsp "> Review </a>
(...)
Après la connexion, j'ai essayer de cliquer sur l'Examen, il m'envoie à l'Examen.jsp, mais il me montre que je ne suis pas connecté. J'utilise le Framework Spring, Tomcat 7, Eclipse, MySQL. Lorsque je me connecte, j'ai créer un cookie:
String timestamp = new Date().toString();
String sessionId = DigestUtils.md5Hex(timestamp);
db.addSession(sessionId, username, timestamp);
Cookie sid = new Cookie("sid", sessionId);
response.addCookie(sid);
Pour chaque méthode, j'ai quelque chose comme ça (je l'ai vu dans un tutoriel):
@RequestMapping(value = "/writeReview", method = RequestMethod.GET)
public String nameMethod(@CookieValue("sid") String sid,...)
À l'aide de la sid, je peux savoir qui est l'utilisateur. J'ai une base de données avec le compte de l'utilisateur et de certains autres tables. Le problème est que lorsque je clique sur l'examen ou de tout autre, il me montre que je ne suis pas connecté. Que puis-je faire?
Mise à JOUR:
J'utilise JavaBean pour l'utilisateur et la connexion.jsp. La JSP qui a la zone de texte pour la connexion, j'ai une méthode GET quand je clique sur le bouton pour vous connecter.
@RequestMapping(value = "/login", method = RequestMethod.GET)
public ModelAndView createCookie(
@RequestParam("username") String username, @RequestParam("password") String password,
HttpServletRequest request, HttpServletResponse response) throws SQLException {
//code for creating the cookie here, after testing if the user is in my database
}
Pour chaque page, j'ai envoyer le sid et j'ai un attribut pour le modèle, nom d'utilisateur:
public String methodName(@CookieValue(required = false) String sid, Model model) {
if (sid != null) {
User user = getUserBySid(sid);
model.addAttribute("user", user);
}
(..other data.)
return "nameJSP.jsp";
}
J'ai vérifier dans chaque JSP si le nom d'utilisateur n'est pas vide, c'est ainsi que je vois si un utilisateur est connecté. L'application va bien, il passe les paramètres si je ne clique pas sur les liens de l'en-tête ou le pied de page. Le problème c'est que je dois passer , disons, un paramètre à partir d'une JSP qui est le contenu réel de la mise en page de la page JSP visées par le pied de page et cette JSP sera le prochain contenu de ma mise en page. La mise en page seulement reconnaître le contenu et le titre:
<title>${param.title}</title>
(I didn't paste all the code, I use a table <table>....)
<%@ include file="header.jsp"%>
<%@ include file="login.jsp"%>
<jsp:include page="${param.content}.jsp"/>
<%@ include file="footer.jsp"%>
Alors, comment puis-je inclure un paramètre dans cette JSP qui seront reçus à partir d'un autre JSP? Aussi, il devra être accessible en fonction de la disposition.jsp et envoyé pour le pied de page ou l'en-tête?
<jsp:include page="layout.jsp">
<jsp:param name="content" value="X"/>
<jsp:param name="title" value="Start navigate"/>
</jsp:include>
En règle générale, si vous êtes à la mise en œuvre de connexion personnalisée du système, pour ainsi dire, par la main, après authentification, vous ajoutez les données de l'utilisateur (le meilleur moyen est d'utiliser un certain personnalisé de l'Utilisateur de la classe) pour la session comme ceci:
request.getSession().setAttribute("loggedInUser", user);
, où loggedInUser est juste une chaîne de caractères identifiant. Et c'est Tomcat qui va produire les id de sessionRegardez cette réponse par @BalusC, peut-il vous aidera à obtenir quelques indices: stackoverflow.com/a/1946121/814702
J'ai ajouté quelques nouvelles choses à propos de mon code.
Et encore une remarque: il est très recommandé d'utiliser doPost() ou, en cas de Printemps,
method = RequestMethod.POST
pour le contrôleur, qui traite de la connexion, autrement informations sensibles seront visibles dans l'URL
OriginalL'auteur sonya | 2013-01-02
Vous devez vous connecter pour publier un commentaire.
Pour passer des paramètre(s) à la JSP:
Vous le faites déjà.
OK, les détails de la question n'est pas très clair, mais j'ai l'idée.
L'une des solutions pourrait être la suivante.
Dans votre Connexion action, si l'authentification a réussi, créer HttpSession et de définir un attribut de la authentifié Utilisateur:
Et dans le code où vous contrôlez si l'utilisateur est connecté, il suffit de vérifier la présence de la HttpSession attribut:
Ou de votre JSP page, vous pouvez vérifier si l'utilisateur est connecté à l'aide JSTL balises comme l'ont montré par BalusC dans l'exemple ici:
Filtres à la rescousse
Mais généralement, vous vérifier si l'utilisateur est connecté à restreindre l'accès à certaines pages (de sorte que seul l'utilisateur authentifié peut y avoir accès). Et vous écrivez une classe qui implémente javax.servlet.Filtre.
Voici un exemple de la LoginFilter de l'un de mes projets:
Dans ce projet, j'ai utilisé de la plaine de servlets et de JSP sans Ressort, mais vous obtenez l'idée.
Et bien sûr, vous doit configurer web.xml pour utiliser ce filtre:
Note:
Si vous utilisez un Conteneur Web ou Serveur D'Application qui prend en charge la Servlet version 3.0 et plus, alors, vous pouvez annoter votre classe de filtre avec @WebFilter annotation auquel cas il n'est pas nécessaire de configurer le filtre dans la le descripteur de déploiement (web.xml). Voir un exemple d'utilisation de @WebFilter d'annotation et de plus de Filtrer les informations liées à ici.
Espère que cela va vous aider.
Heureux, il a aidé.
OriginalL'auteur informatik01
Ou simplement l'utiliser:
OriginalL'auteur Yster