Maison  >  Article  >  Java  >  Introduction aux exemples d'utilisation du code de vérification combiné avec springboot lors de la connexion

Introduction aux exemples d'utilisation du code de vérification combiné avec springboot lors de la connexion

零下一度
零下一度original
2017-06-17 11:48:061740parcourir

Dans une application Web, Le code de vérification est un élément commun. Qu'il s'agisse d'empêcher les robots ou les robots d'exploration, cela a un certain effet. L'article suivant présente principalement les informations pertinentes sur le code de vérification de connexion kaptcha combinées à l'utilisation du Spring Boot. Les amis dans le besoin peuvent s'y référer.

Avant-propos

Lorsque notre utilisateur se connectera, pour des raisons de sécurité, nous ajouterons une fonction de code de vérification de Google. kaptcha est utilisé ici ; spirngboot est léger et indépendant, ce qui rend le développement d'applications basées sur Spring particulièrement simple. Il existe de nombreuses introductions à Springboot sur Internet, je n'entrerai donc pas dans les détails ici.

Pour revenir au sujet, parlons de l'utilisation du code de vérification combiné avec springboot lors de la connexion.

Le package jar nécessaire pour présenter kaptcha, je l'utilise ici. Ce qu'il faut, c'est maven


  <dependency> 
   <groupId>com.github.penggle</groupId> 
   <artifactId>kaptcha</artifactId> 
   <version>2.3.2</version> 
    
   <exclusions> 
    <exclusion> 
     <artifactId>javax.servlet-api</artifactId> 
     <groupId>javax.servlet</groupId> 
    </exclusion> 
   </exclusions> 
  </dependency>

pour supprimer le package de servlet fourni avec le package. D'après ma compréhension personnelle, springboot est une micro-architecture légère construite avec javaconfig et des annotations.

Ce qui suit est la configuration java de kapcha


@Configuration 
public class CaptchaConfig { 
  
 
 @Bean(name="captchaProducer") 
 public DefaultKaptcha getKaptchaBean(){ 
  DefaultKaptcha defaultKaptcha=new DefaultKaptcha(); 
  Properties properties=new Properties(); 
  properties.setProperty("kaptcha.border", "yes"); 
  properties.setProperty("kaptcha.border.color", "105,179,90"); 
  properties.setProperty("kaptcha.textproducer.font.color", "blue"); 
  properties.setProperty("kaptcha.image.width", "125"); 
  properties.setProperty("kaptcha.image.height", "45"); 
  properties.setProperty("kaptcha.session.key", "code"); 
  properties.setProperty("kaptcha.textproducer.char.length", "4"); 
  properties.setProperty("kaptcha.textproducer.font.names", "宋体,楷体,微软雅黑");   
  Config config=new Config(properties); 
  defaultKaptcha.setConfig(config); 
  return defaultKaptcha; 
 } 
}

La configuration java de katcha ici est équivalente à la configuration du bean dans springmvc. est un exemple de bean javaconfig springmvc ci-dessus, pour référence


<bean id="captchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha"> 
  <property name="config"> 
   <bean class="com.google.code.kaptcha.util.Config"> 
    <constructor-arg> 
     <props> 
      <prop key="kaptcha.border">yes</prop> 
      <prop key="kaptcha.border.color">105,179,90</prop> 
      <prop key="kaptcha.textproducer.font.color">blue</prop> 
      <prop key="kaptcha.image.width">125</prop> 
      <prop key="kaptcha.image.height">45</prop> 
      <prop key="kaptcha.textproducer.font.size">45</prop> 
      <prop key="kaptcha.session.key">code</prop> 
      <prop key="kaptcha.textproducer.char.length">4</prop> 
      <prop key="kaptcha.textproducer.font.names">宋体,楷体,微软雅黑</prop> 
     </props> 
    </constructor-arg> 
   </bean> 
  </property> 
 </bean>

parmi lesquels les paramètres d'attribut dans la méthode constructeur peuvent être définis en fonction de vos propres besoins.

Le fichier de configuration a été configuré, alors comment obtenir votre propre code QR. Ma compréhension est le concept de canevas, puis générer le canevas correspondant à partir du code de vérification à quatre chiffres généré ? . Ensuite, laissez le résultat être écrit.

Le code est le suivant :


@RequestMapping(value = "/captcha-image") 
 public ModelAndView getKaptchaImage(HttpServletRequest request, 
   HttpServletResponse response) throws Exception { 
  response.setDateHeader("Expires", 0); 
  response.setHeader("Cache-Control", 
    "no-store, no-cache, must-revalidate"); 
  response.addHeader("Cache-Control", "post-check=0, pre-check=0"); 
  response.setHeader("Pragma", "no-cache"); 
  response.setContentType("image/jpeg"); 
 
  String capText = captchaProducer.createText(); 
  System.out.println("capText: " + capText); 
 
  try { 
   String uuid=UUIDUtils.getUUID32().trim().toString();    
   redisTemplate.opsForValue().set(uuid, capText,60*5,TimeUnit.SECONDS); 
   Cookie cookie = new Cookie("captchaCode",uuid); 
   response.addCookie(cookie); 
  } catch (Exception e) { 
   e.printStackTrace(); 
  } 
 
   
 
  BufferedImage bi = captchaProducer.createImage(capText); 
  ServletOutputStream out = response.getOutputStream(); 
  ImageIO.write(bi, "jpg", out); 
  try { 
   out.flush(); 
  } finally { 
   out.close(); 
  } 
  return null; 
 }

Comme le code ci-dessus, utilisez le code de vérification lorsque le L'utilisateur se connecte et le captchacode dans cooike est utilisé pour vérifier l'unicité. Au début, j'ai envisagé de le mettre dans la session. Après y avoir réfléchi à l'époque, j'ai senti que ce n'était pas scientifique. la session, il y aurait alors un code de vérification, puis un autre. L'utilisateur se reconnecte et l'utilisateur précédent se connecte toujours. À ce moment, une série de problèmes se produiront. Les cookies et Redis sont utilisés ici pour gérer la vérification simultanée de la connexion des utilisateurs.

La page est également relativement simple à utiliser comme suit :


<p style="float: left;"> 
  <i><img style="height:22px;" id="codeImg" alt="点击更换" title="点击更换" src="code/captcha-image" /></i> 
</p>

Si vous souhaitez la remplacer , ajoutez un événement de clic, puis effacez les données du cache correspondantes dans redis ou lors de l'obtention du code de vérification, définissez le cycle de vie.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn