Dans nos vies, il est déjà très courant pour la connexion automatique aux comptes, nous utilisons donc des filtres pour implémenter cette fonction.
Il introduit principalement la connexion automatique de l'utilisateur et la connexion automatique annulée, ainsi que la réalisation de la connexion automatique en un jour ou n jours. Une fois la propriété intellectuelle de l'utilisateur à la liste noire, il utilise directement le filtre pour revenir à une page d'avertissement.
La fonction du filtre est très puissante. Nous n'avons qu'à ajouter le servlet après le backend frontal écrit pour réaliser cette fonction.
PS: Ce n'est qu'une démonstration. J'ai simulé la partie de la base de données d'accès par moi-même, se concentrant principalement sur la réalisation de la fonction de connexion automatique.
Code de réception:
Que le code de premier plan soit réussi ou non s'affiche sur cette page. Techniques utilisées: application des balises JSTL, valeur de lecture de session
<% @ Page Language = "Java" Import = "Java.util. *" Pageencoding = "UTF-8"%> <% @ taglib uri = "http://java.sun.com/jsp/jstl/core" Prefix = "C"%> <! DocType html Public "- // w3c // dtd html 4.01 Public" - // w3c // dtd html 4.01 Transitional //n <html> <éad- head> </ head> <body> <c: if test = "$ {! vide sessionscope.error}"> Votre mot de passe ou nom d'utilisateur est faux. <! - Après affichage, vous devez supprimer la valeur à l'intérieur -> <c: supprimer var = "error" scope = "session" /> </ c: if> <c: if test = "$ {vide sessionscope.user}" var = "boo"> <h2> Il s'agit de la page pour la connexion </ h2> <formulaire " type = "text" name = "name" /> <br/> pwd: <input type = "text" name = "pwd" /> <br/> non automatiquement connecté: <input type = "radio" name = "time" value = "0" /> <br/> un jour: <entrée type = "radio" name = "time" value = "1" /> <br/> Sept Days: <entrée type = "Name =" time = "7 /> <br/> <input type = "soumi" value = "soumi" /> </ form> </ c: if> <c: if test = "$ {! boo}"> Bienvenue, $ {Sessionscope.user}, avec succès dans <a href = ""> module 1 </a> <a href = ""> module 2 </a> <a href = " Value = '/ CancelAutologin' //> "> Cancelautologin </a> </c: if> </ body> </html>Le code d'implémentation de servlet:
Comme le code précédent, il est seulement responsable de l'interaction avec la réception: la technologie qui y est utilisée comprend le codage d'URL, la valeur est dans le cookie, la session est dans la page et la page est sautée (transmise)
public void doPost (requette httpservletRequest, réponse httpservletResponse) lève Servlexception, ioException {String name = request.getParameter ("name"); String pwd = request.getParameter ("pwd"); String time = request.getParameter ("time"); if (name! = null && pwd! = null && name.equals (pwd)) {// Écrivez ici comme vous le souhaitez, vous devriez aller au service -> dao pour accéder à la base de données ultérieurement // en supposant que la connexion est réussie, nous stockons les informations dans la session request.getSession (). SetAttract ("user", name); // Compatible avec le chinois, nous devons coder name = urlencoder.encode (nom, "utf-8"); pwd = urlencoder.encode (pwd, "utf-8"); Cookie C = nouveau cookie ("autologine", nom + "," + pwd); // Cette valeur ne peut pas être utilisée de cette manière. Pour les considérations de sécurité, nous devons savoir pour utiliser le chiffrement ou le chiffrement secondaire, int _time = 60 * 60 * 24 * Integer.ValueOf (temps); C.SetMaxage (_time); réponse.addcookie (c); Response.SendRedirect (request.getContextPath () + "/ index.jsp"); // Le paramètre par défaut dans le filtre est d'intercepter la redirection, et le transfert est un transfert interne direct. Cependant, le filtre n'est pas facile à gérer, mais il vous suffit de le configurer dans web.xml. } else {request.getSession (). setAttribute ("Error", "1"); réponse.SendRedirect (request.getContextPath () + "/ index.jsp"); }}Jusqu'à présent, je pense qu'il n'y a pas de technologie. Le même code que les précédents est désormais la fonction du filtre.
Connexion sécurisée:
Nous avons utilisé une importation dynamique pour vous connecter en toute sécurité auparavant, afin d'empêcher les utilisateurs de se connecter sans se connecter après l'entrée dans le projet. Vous pouvez saisir l'interface à volonté en entrant dans le projet. L'importation dynamique peut atteindre cette fonction, mais il est préférable d'utiliser des filtres.
Généralement, DoFilter () est écrit dans le filtre; Il vous suffit de déterminer si le conteneur de session est nul. Cela signifie que cela n'est pas connecté. Recommencez simplement à l'interface de connexion. Sinon, laissez-le partir
Le code est présenté:
Public void Dofilter (ServLetRequest Request, ServletResponse Response, FilterChain Chain) lève IOException, ServletException {httpServletRequest req = (httpServLetRequest) request; HttpServletResponse resp = (httpservletResponse) Réponse; String session = (String) req.getSession (). GetAttribute ("utilisateur"); if (session == null) {System.out.println ("Login anormal"); resp.sendRedirect (req.getContextPath () + "/ index.jsp"); } else {System.out.println ("Connexion réussie"); chaîne.Dofilter (req, resp); }}Encodage de caractère:
Le problème de l'encodage des caractères. Dans le passé, j'ai dû y entrer manuellement dans le doPost () du servlet à chaque fois, demande.SetcharAtterencoding ("UTF-8"); Chaque servlet a besoin d'entrée, ce qui est trop gênant, nous utilisons donc des filtres pour l'implémenter;
Le code est présenté:
<span style = "Font-Size: 18px;"> public void Dofilter (ServletRequest Request, ServletResponse Response, filterChain chaîne) lance ioException, servlexception {request.Setcharacterending (caractère); // supprimer l'encodage reçu par le client.SetContType ("Text / html; Charset = utf-18"); chain.dofilter (demande, réponse); } @Override public void init (filterConfig config) lève ServletException {caractères = config.getInitParameter ("caractères"); // a </span> <span style = "font-size: 18px; font-family: Arial, Helvetica, Sans-Serif;"> Haracter en tant que variable mondiale, </pank> <pany style = "Font-Size: 18px; } </span>Le caractère ci-dessus est défini comme une variable globale, et la valeur initiale est configurée dans web.xml.
Le code web.xml est présenté:
<filter> <filter-name> caractères </ filter-name> <filter-class> cn.hncu.filter.characterfilter </ filter-Class> <Init-Param> </ param-name> Caractère </ param-name> <a param-value> utf-8 </ param-évalue> </1nit-Param> </filter>
Connexion automatique:
Idée principale: la connexion automatique nécessite de déterminer que la session a des valeurs. S'il y en a, alors après vous être connecté, s'il y a non, allez au cookie local pour le trouver, exister et faire correspondre la base de données. Si le match réussit, ajoutez le conteneur de session.
Le code est présenté:
Public void Dofilter (ServLetRequest Request, ServletResponse Response, FilterChain Chain) lève IOException, ServletException {// se connecter automatiquement, vous devez définir qu'il y a des valeurs dans la session. S'il y en a, alors vous vous êtes connecté et non, vous devez accéder aux données du cookie. Les données du cookie // si les données de la base de données correspondent à la base de données? Oui, définissez la valeur de la session ici, non, laissez httpservletRequest req = (httpServLetRequest) demande; HttpServletResponse resp = (httpservletResponse) Réponse; String session = (String) req.getSession (). GetAttribute ("utilisateur"); if (session == null) {// indique qu'aucun cookie n'a été connecté à l'heure actuelle CS [] = req.getCookies (); if (cs! = null) {for (cookie c: cs) {if (c.getName (). equals ("autologin")) {String value = c.getValue (); // Ceci est crypté, mais nous venons de connecter avec des virgules. String [] strs = value.split (","); // Dans logSerlvet, nous utilisons d'abord le codage, puis la connexion de la virgule. Nous devons inverser la chaîne Nom = UrLDEcoder.decode (STRS [0], "UTF-8"); String pwd = urlDEcoder.decode (STRS [1], "UTF-8"); // Obtenez le nom, les données PWD en arrière-plan pour accéder à la base de données, nous écrivons simplement if (name.equals (pwd)) {req.getSession (). SetAttribute ("utilisateur", nom); // définir la rupture des paramètres en session; }}}}} chaîne.dofilter (req, resp); // vous devez lâcher prise. . }Utilisateurs sur liste noire
Utilisateurs sur liste noire, ne pas se connecter, dites-leur simplement le résultat
Le code est présenté:
Public void Dofilter (ServLetRequest Request, ServletResponse Response, FilterChain Chain) lève IOException, ServletException {httpServletRequest req = (httpServLetRequest) request; HttpServletResponse resp = (httpservletResponse) Réponse; String ip = req.getReMoteaddr (); // accéder à IP; System.out.println (IP + "IIPP"); if (set.contains (ip)) {// à l'intérieur de la liste noire System.out.println ("set"); resp.getwriter (). print ("vous êtes dans la liste noire .. <a href = '" + req.getContextPath () + "/ index.jsp'> return </a>"); // retour n'est pas possible, car l'index intercepte directement lors de la demande au serveur} else {chain.dofilter (req, resp); }} Le type renvoyé par la liste noire est le meilleur. Je l'ai ajouté manuellement ici. Je devrais à l'origine le lire à partir de la base de données en écrivant une classe d'outils. Il peut non seulement être vérifié, mais également ajouter, supprimer et modifier - Blacklist.
Le code est présenté:
HashSet est défini comme une variable globale, et le jeu contient, ce qui est très efficace.
public void init (filterconfig arg0) lève ServletException {// voici une liste de listes noires, récupérée à partir de la base de données. Voici juste un ensemble de simulation simple.add ("192.132.0.12"); // Il s'agit d'une IP noire, qui est obtenue à partir de la base de données d'arrière-plan. set.add ("localhost"); set.add ("192.132.32.4"); set.add ("127.0.0.1"); }Annuler la connexion automatique
Lorsque la connexion automatique est toujours considérée comme dangereuse, nous définissons qu'aucune connexion automatique
Nous savions avant que la connexion automatique repose sur la technologie stockée dans les cookies, donc nous n'avons ici que de supprimer les cookies.
Étant donné que l'annulation de la connexion automatique est un hyperlien, il est écrit comme un servlet.
Le code est présenté:
public void dopost (httpservletRequest req, httpservletResponse resp) lève ServletException, ioException {cookie cc = new cookie ("autologin", ""); // la méthode pour supprimer le cookie est de créer un connkie avec le même nom, puis de fixer le cookie du cookie = 0; CC.SetMaxage (0); cc.setPath (req.getContextPath ()); resp.addcookie (CC); resp.sendRedirect (req.getContextPath () + "/ index.jsp"); }Ce qui précède peut réaliser ces fonctions de réponse courtes.
Ce qui précède est une explication détaillée des connaissances pertinentes introduites par l'éditeur à Javaee à l'aide de filtres pour réaliser la connexion automatique et sécuriser la connexion pour annuler la connexion automatique. J'espère que ce sera utile à tout le monde. Si vous avez des questions, veuillez me laisser un message et l'éditeur répondra à tout le monde à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!