Prefácio:
Em relação à introdução do Kaptcha e à integração do Spring Kaptcha, expliquei em detalhes em outro artigo. Consulte: Código de verificação do kaptcha da primavera.
Este artigo introduzirá duas maneiras de integrar o Springboot no Kaptcha.
Ferramentas e tecnologias de desenvolvimento:
1. IDEA 2017
2. Springboot 2.0.2
3. Kaptcha
Comece oficialmente:
Método 1: Configurar através do kaptcha.xml
1. Crie uma nova inicialização da primavera usando a ideia
2. Adicione as dependências de Kaptcha:
<!-Código de verificação de Kaptcha-> <Ependency> <Puerpid> com.github.penggle </groupiD> <stifactId> kaptcha </artifactId> <versão> 2.3.2 </versão </dependency>
3. Crie um novo kaptcha.xml sob recursos, com o seguinte conteúdo:
kaptcha.xml
<? xml versão = "1.0" coding = "utf-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http:/wwww.w3 xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-bans.xsd"> <!-gerar kaptchapan- beins <bean/skring> " <Bean> <construtor-arg type = "java.util.properties"> <!-Definir Kaptcha Properties-> <Props> <propi key = "kaptcha.border"> sim </prop> <prop) key="kaptcha.textproducer.font.color">blue</prop> <prop key="kaptcha.image.width">100</prop> <prop key="kaptcha.image.height">50</prop> <prop key="kaptcha.image.height">50</prop> <prop key="kaptcha.image.height">50</prop> <prop key = "kaptcha.image.Height"> 50 </pp> <propi key = "kaptcha.image.height"> 50 </pp> <prop key = "kaptcha. key =" kaptcha.textproducer.font.size "> 27 </prop> <propra <pke =" kaptcha.Sess.Session.FONT.MIZE "> 27 </prop> <prop) key = "kaptcha.textproducer.char.length"> 4 </pp> <prop key = "kaptcha.textproducer.char.string"> 0123456789Abcefghijklmnopqrstuvwxyz </prop> <prop) <phapy = "kaptcha.obscurificator.impl"> com.google.code.kaptcha.impl.atrifly </sup> propina key = "kaptcha.noise.color"> preto </pp> <prop key = "kaptcha.noise.impl"> com.google.code.kaptcha.impl.defaultNoise </prop> <prop key = "kaptcha.background.clear.to"> white </pp> <propi key = "kaptcha.textproduces.char.space"> 3 </pup> </siles> </frutructor-arg> </shean> </erouse> </sience> </ Beans>
NOTA: O conteúdo em kaptcha.xml é realmente o mesmo que o conteúdo no spring-kaptcha.xml quando a primavera integra o kaptcha. Significa entregar Kaptcha ao gerenciamento de contêineres de mola, definir algumas propriedades e injetar diretamente quando necessário.
4. Carregue Kaptcha.xml:
Adicione @ImportResource(locations = {"classpath:kaptcha/kaptcha.xml"}), adicione esta anotação, o trampolim carregará o arquivo kaptcha.xml. Observe que o caminho do kaptcha.xml não deve ser escrito incorretamente, o ClassPath é o diretório de recursos aqui.
5. Escreva um controlador para gerar código de verificação:
Codecontroller.java
@ControllerPublic CLET CodeController {@AUTOWIRED PRODUTADOR PRIVIDO CAPTCHAPRODUCER = NULL; @RequestMapping ("/kaptcha") public void getKaptChaimage (solicitação httpServletRequest, httpServletResponse resposta) lança exceção {httpSession session = request.getSession (); Response.SetDateHeader ("Expira", 0); Response.setheader ("Cache-Control", "No Store, sem cache, obrigatória-revalidada"); Response.AddHeader ("Cache-Control", "pós-verificação = 0, pré-verificação = 0"); Response.setheader ("Pragma", "sem cache"); Response.setContentType ("Image/jpeg"); // gerar código de verificação string captext = captChaproduces.createText (); session.setAttribute (constantes.kaptcha_session_key, captext); // grava bufferImage para o cliente bi = captChaproduces.createImage (captext); ServletOutputStream Out = Response.getOutputStream (); Imageio.write (bi, "jpg", out); tente {out.flush (); } finalmente {out.close (); }}}Nota: Injete o feijão configurado em kaptcha.xml neste caminho do controlador e, em seguida, você pode usá -lo para gerar o código de verificação e produzir o código de verificação para o cliente; Lembre-se da rota desta classe, o SRC do código de verificação da página front-end precisa apontar para essa rota.
6. Crie uma nova ferramenta de comparação de código de verificação:
Codeutil.java
classe pública CodeUtil { / ** * Converta o parâmetro front-end obtido em string type * @param request * @param key * @return * / public static string getString (httpServletRequest solicitação, chave de string) {tente {string result = request.getParameter (key); if (resultado! = null) {resultado = resultado.trim (); } if ("". Equals (resultado)) {resultado = null; } resultado de retorno; } catch (Exceção e) {return null; }} /** * Verificação do código de verificação * @param request * @return * /public static boolean checkVerifyCode (httpServletRequest request) {// obtenha o código de verificação gerado stringingetrifedCodeexpeed = (string) request.getSession). // Obtenha o código de verificação inserido pela string do usuário verifyCodeActual = codeUtil.getString (request, "verifyCodeActual"); if (verifyCodeActual == NULL ||! VerifyCodeActual.equals (verifiqueCoDexpeed)) {return false; } retornar true; }}Nota: Esta classe é usada para comparar o código de verificação gerado com o código de verificação inserido pelo usuário. O código de verificação gerado será adicionado automaticamente à sessão e a entrada do usuário será obtida através do getParameter. Observe que o valor da chave do getParameter deve ser consistente com o valor do nome do código de verificação na página.
7. Use o código de verificação:
① Controlador
Helloworld.java
@RestControllerPublic Classe Helloworld {@ReQuestMapping ("/hello") public String Hello (httpServletRequest request) {if (! CodeUtil.checkVerifyCode (request)) {retorna "O código de verificação está incorreto!"; } else {return "Hello, World"; }}} ②Página
Olá.html
<! Doctype html> <html lang = "en"> <head> <meta charset = "utf-8"> <title> title </title> <script type = "text/javascript"> funchesh () {document.getElementby ('captcha_img'). } </script> </ad Head> <body> <formulário action = "/hello" Method = "post"> Código de verificação: <input type = "text" placeholder = "digite o código de verificação" name = "verifyCodeActual"> <div> <img id = "captcha_img" anclick = "refresh ()" src> value = "submeter"/> </morm> </body> </html>NOTA: O código de verificação é essencialmente uma imagem, então use a tag <mg> e use src = "/kaptcha" para apontar para a rota do controlador que gera o código de verificação; Ligue para o código JS através do OnClick = "Refresh ()" para realizar a função de clique para trocar; Preste atenção ao valor do nome em <input name = "verifyCodeActual">, e o valor da chave aprovado ao obter o código de verificação inserido pelo usuário através do método getParameter () de solicitação no codeUtil deve ser consistente com o valor do nome aqui.
8. Teste:
Insira o código de verificação correto
Verificação passada
Digite o código de verificação errado
Verificação falhou
Método 2: Configurar Kaptcha através da classe de configuração
1. Configure Kaptcha
Comparado com o método um, um aumenta e dois diminuem.
reduzir:
①Delete Kaptcha.xml ②delete @ImportResource(locations = {"classpath:kaptcha/kaptcha.xml"}) anotação na classe de inicialização
aumentar:
① Crie uma nova classe de configuração do Kaptchaconfig, o conteúdo é o seguinte:
Kaptchaconfig.java
@ConfigurationPublic Classe Kaptchaconfig {@Bean public DefaultKaptcha getDefaultkaptcha () {Defaultkaptcha captChaproduces = new Defaultkaptcha (); Propriedades Propriedades = new Properties (); Propriedades.setProperty ("Kaptcha.border", "Sim"); Propriedades.SetProperty ("Kaptcha.border.color", "105,179,90"); Propriedades.SetProperty ("Kaptcha.textproducer.font.color", "Blue"); Propriedades.SetProperty ("Kaptcha.image.width", "110"); Propriedades.SetProperty ("Kaptcha.image.Height", "40"); Properties.SetProperty ("kaptcha.textproducer.font.size", "30"); Propriedades.SetProperty ("Kaptcha.Session.Key", "Code"); Properties.SetProperty ("Kaptcha.textproducer.char.length", "4"); Properties.SetProperty ("Kaptcha.textproducer.font.names", "Song Font, Kai Font, Microsoft Yahei"); Config config = new config (propriedades); captChaproduces.setConfig (config); retornar captchaproduces; }}NOTA: Esta classe é usada para configurar o Kaptcha, que é equivalente a kaptcha.xml no método 1. Adicione o kaptcha ao contêiner do IOC e retorne a uma instância com as propriedades definidas e finalmente injete -a no CODECONTROLLER. Você pode usá -lo para gerar código de verificação no codecontroller. Preste atenção especial ao retorno Captchaproduces; O nome do captChaproduce no produtor privado captChaproduces = null;, caso contrário, o feijão não será carregado.
2. Teste:
Digite o código de verificação correto:
Verificação passada
Digite o código de verificação errado
Verificação falhou
Para explicar que os códigos de verificação das duas vezes são gerados com base em dois métodos, os códigos de verificação do primeiro e do segundo métodos são definidos diferentes atributos. A partir da imagem, podemos ver que as cores, as linhas de interferência, os fundos etc. dos códigos de verificação das duas vezes são diferentes.
Resumir:
1. Classificação do processo:
Não importa de que maneira, você deve primeiro adicionar kaptcha ao recipiente de mola, ou seja, deve haver um Kaptcha Bean; Em seguida, crie um novo controlador e injete o Bean Kaptcha no controlador para gerar códigos de verificação; Depois, há uma classe de ferramentas que compara o código de verificação e ligue para a classe de ferramentas no controlador de teste para comparação do código de verificação; Finalmente, na página front-end, você só precisa usar <img src = "/生成验证码的controller的路由"> para obter o código de verificação. Ao adicionar um evento de clique nesta tag IMG, você pode realizar "clique para alternar o código de verificação".
2. Comparação com a integração da primavera kaptcha
A integração da primavera Kaptcha também apresenta dois métodos. A configuração é a mais simples no web.xml e não há necessidade de escrever um controlador que gera código de verificação. Na página, use o SRC para apontar para o valor <url-padrão> do servlet de Kaptcha em web.xml.
Ambos os métodos de integração do trampolim que integram o kaptcha são semelhantes ao segundo método de integração da mola. Eles são usados para configurar os feijões primeiro e depois usam controladores para gerar códigos de verificação. O front-end usa SRC para apontar para este controlador. A diferença é que, se o controlador que gera códigos de verificação for /xxx, então src = "xxx.jpg" quando o Springboot integrando kaptcha src = "/xxx"。
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.