>Java >java지도 시간 >로그인 시 springboot와 결합된 인증코드 사용예 소개

로그인 시 springboot와 결합된 인증코드 사용예 소개

零下一度
零下一度원래의
2017-06-17 11:48:061797검색

인증 코드는 웹 애플리케이션의 공통 요소입니다. 로봇을 방지하든 크롤러를 방지하든 일정한 효과가 있습니다. 다음 기사에서는 스프링 부트 사용과 결합된 로그인 인증 코드에 대한 관련 정보를 주로 소개합니다.

머리말

사용자가 로그인할 때 ​​보안상의 이유로 Google의 kaptcha가 여기에 사용되며 가볍고 독립적이므로 스프링 기반 애플리케이션 개발이 가능합니다. 매우 간단합니다. 인터넷에는 springboot에 대한 소개가 많이 있으므로 여기서는 자세히 설명하지 않겠습니다.

본점으로 돌아가서 로그인 시 springboot와 결합된 인증코드의 사용법에 대해 이야기해보자

kaptcha에 필요한 jar 패키지를 소개하는데, 저는 여기서 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>

제공되는 서블릿을 제거합니다 패키지 가방으로. 내 개인적인 이해에 따르면 springboot는 javaconfig 및 주석으로 구축된 경량 마이크로 아키텍처입니다.


다음은 kapcha의 javaconfig입니다


@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; 
 } 
}

여기서 katcha의 javaconfig는 springmvc의 bean 구성과 동일합니다. 참고용으로 위 javaconfig에 대한 springmvc의 bean 예제를 보여드리겠습니다.

construction method

의 속성 매개변수는 필요에 따라 설정할 수 있습니다.


구성 파일

이 구성되었으니 나만의 QR 코드를 어떻게 얻을 수 있을까요? 제가 이해한 것은 캔버스 개념이고, 생성된 4자리 인증 코드로 해당 캔버스를 생성한 다음 결과를 작성하는 것입니다.

코드는 다음과 같습니다.

<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>
위 코드처럼 사용자가 로그인할 때 인증코드와 cooike의 captchacode를 사용하여 고유성 인증을 하려고 처음에는 넣는 것을 고려했습니다. 생각해 보니 비과학적이라는 생각이 듭니다. 예를 들어 세션에 보안문자 코드가 있으면 나중에 다른 사용자가 다시 로그인하고 이전 사용자가 계속 로그인하고 있습니다. .이때 일련의 문제가 발생하게 됩니다. 여기서는 쿠키와 redis를 사용하여 사용자의 동시 로그인 확인을 처리합니다.


페이지는 다음과 같이 비교적 간단하게 사용할 수 있습니다.


@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; 
 }
변경하려면 클릭 이벤트를 추가한 다음 redis에서 이전 해당 캐시 데이터

를 지우거나 수명을 설정하세요. 인증 코드를 받을 때 주기입니다.

위 내용은 로그인 시 springboot와 결합된 인증코드 사용예 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.