springBoot(2)整合GoogleKaptcha和整合jsp所遇到的坑

    xiaoxiao2022-07-13  171

    idea中SpringBoot整合kaptcha

    idea中SpringBoot与jsp整合,路径正确,找不到jsp页面问题解决方法

    Kaptcha是一个非常实用的验证码生成工具,可以通过配置生成多样化的验证码。以图片的形式显示,从而无法进行复制粘贴。

    在一个web应用中验证码是一个常见的元素。不管是防止机器人还是爬虫都有一定的作用,我们是自己编写生产验证码的工具类,也可以使用一些比较方便的验证码工具。在网上收集一些资料之后,今天给大家介绍一下kaptcha的和springboot一起使用的简单例子。

    此处为一个demo案例   和springBoot整合jso所遇到的坑

    1.你要有一个springboot的hello world的工程,并能正常运行 此处用springBoot(1)中的demo

    2.jar包准备

     

    <!-- google生成验证码 start--> <dependency> <groupId>com.github.axet</groupId> <artifactId>kaptcha</artifactId> <version>0.0.9</version> </dependency> <!-- google生成验证码 end-->

    我用的是com.github.axet

       别的帖子用的是

    测试可以正常下载,这里推荐阿里的maven仓库,下载速度还行,挺稳定,附地址:http://maven.aliyun.com/nexus/#welcome

    <dependency> <groupId>com.github.penggle</groupId> <artifactId>kaptcha</artifactId> <version>2.3.2</version> </dependency>

    3.配置类

    package com.shan.config; import com.google.code.kaptcha.impl.DefaultKaptcha; import com.google.code.kaptcha.util.Config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.util.Properties; /** * 生成验证码配置 * * @author sc * */ @Configuration public class KaptchaConfig { @Bean public DefaultKaptcha producer() { Properties properties = new Properties(); properties.put("kaptcha.border", "no"); properties.put("kaptcha.textproducer.font.color", "black"); properties.put("kaptcha.textproducer.char.space", "5"); Config config = new Config(properties); DefaultKaptcha defaultKaptcha = new DefaultKaptcha(); defaultKaptcha.setConfig(config); return defaultKaptcha; } }

    4.Controller中的方法

    package com.shan.controller; import com.google.code.kaptcha.Constants; import com.google.code.kaptcha.Producer; import com.google.code.kaptcha.impl.DefaultKaptcha; import com.shan.domain.User; import com.shan.mapper.UserMapper; import io.swagger.annotations.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.*; import javax.imageio.ImageIO; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.List; @Api(description = "登录管理") @Controller public class loginController { @Autowired private Producer producer; /** * 去登陆页面 * @return */ @ApiOperation(value = "去登录", notes = "去登录") @RequestMapping(value = "toLogin", method = RequestMethod.GET) public String toLogin() { return "login"; } /** * 获取验证码 * @param request * @param response * @throws IOException */ @GetMapping("getCaptchaCode") public void captcha(HttpServletRequest request, HttpServletResponse response)throws IOException { response.setHeader("Cache-Control", "no-store, no-cache"); response.setContentType("image/jpeg"); HttpSession session = request.getSession(); //生成文字验证码 String text = producer.createText(); //生成图片验证码 BufferedImage image = producer.createImage(text); //保存到shiro session //ShiroUtils.setSessionAttribute(Constants.KAPTCHA_SESSION_KEY, text); session.setAttribute(Constants.KAPTCHA_SESSION_KEY, text); ServletOutputStream out = response.getOutputStream(); ImageIO.write(image, "jpg", out); } }

    所在位置

     

    5.前台页面代码

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <script src="${pageContext.request.contextPath}/js/jquery-1.7.2.js" type="text/javascript"></script> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>登录页面aa${pageContext.request.contextPath}</title> </head> <body> 生成的验证码:<img id="changeCaptcha" src="http://127.0.0.1:9001/getCaptchaCode"> <a href="javascript:changeCaptcha()">看不清,换一张</a> <br> <br> 请输入验证码:<input id="captchaCode" type="text"> <input type="button" value="提交验证" onclick="checkCaptcha()"> </body> <script type="text/javascript"> //获取验证码图片 function changeCaptcha(){ $("#changeCaptcha").attr("src","http://127.0.0.1:9001/getCaptchaCode"); } //验证输入的验证码 function checkCaptcha(){ var captchaCode = $("#captchaCode").val(); $.ajax({ type:'post', async : false, url:'http://127.0.0.1:9001/checkCaptchaCode', data:{"captchaCode" : captchaCode}, success:function(res){ alert(res); } }); } </script> </html>

    需要注意到引用了jquery.min.js

    效果图

     

     

    附Google Captcha 可配置项

    kaptcha.border 是否有边框 默认为true 我们可以自己设置yes,no kaptcha.border.color 边框颜色 默认为Color.BLACK kaptcha.border.thickness 边框粗细度 默认为1 kaptcha.producer.impl 验证码生成器 默认为DefaultKaptcha kaptcha.textproducer.impl 验证码文本生成器 默认为DefaultTextCreator kaptcha.textproducer.char.string 验证码文本字符内容范围 默认为abcde2345678gfynmnpwx kaptcha.textproducer.char.length 验证码文本字符长度 默认为5 kaptcha.textproducer.font.names 验证码文本字体样式 默认为new Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize) kaptcha.textproducer.font.size 验证码文本字符大小 默认为40 kaptcha.textproducer.font.color 验证码文本字符颜色 默认为Color.BLACK kaptcha.textproducer.char.space 验证码文本字符间距 默认为2 kaptcha.noise.impl 验证码噪点生成对象 默认为DefaultNoise kaptcha.noise.color 验证码噪点颜色 默认为Color.BLACK kaptcha.obscurificator.impl 验证码样式引擎 默认为WaterRipple kaptcha.word.impl 验证码文本字符渲染 默认为DefaultWordRenderer kaptcha.background.impl 验证码背景生成器 默认为DefaultBackground kaptcha.background.clear.from 验证码背景颜色渐进 默认为Color.LIGHT_GRAY kaptcha.background.clear.to 验证码背景颜色渐进 默认为Color.WHITE kaptcha.image.width 验证码图片宽度 默认为200 kaptcha.image.height 验证码图片高度 默认为50

     

    参考

    https://www.cnblogs.com/FlyHeLanMan/p/6293991.html

     

    下面记录springBoot整合jsp所遇到的坑

    idea中SpringBoot与jsp整合,路径正确,找不到jsp页面问题解决方法

    1.前言

    在idea中建了一个module,整合springboot与jsp,项目启动后找不到jsp页面,但是在eclipse中是正常的,网上说的jar的作用域问题都不行,最后终于找到问题所在。

    2. 解决方法

    1)没有解决之前报404

     

     

     

    方案一

    添加idea自带tomcat依赖 

    <!--注意:spring boot对jsp的支持不是很好,在使用spring boot自带tomcat的同时,还需要引入另外的一个tomcat,以来如下所示,且scope属性需要被注释掉 start --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <!--<scope>provided</scope> 注意,这个scope需要被注释掉--> </dependency> <!--注意:spring boot对jsp的支持不是很好,在使用spring boot自带tomcat的同时,还需要引入另外的一个tomcat,以来如下所示,且scope属性需要被注释掉 end --> <!-- jsp标签库 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <scope>provided</scope> </dependency>

     

    需要注意一个地方:controller上的注解为@Controller(表示是一个controller),而不是@RestController(返回json格式数据); 创建目录和jsp文件,并添加web.xml

    如图所示:在main的下级目录,和Java、resources同级目录创建webapp文件夹,并依次创建WEB-INF和jsp,在jsp文件夹中创建login.jsp;在WEB-INF文件夹中创建web.xml文件,内容如下:

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> </beans>

     

    在application.properties中添加jsp的前缀和后缀 注意springBott版本有点不是

    #前缀 spring.mvc.view.prefix=/WEB-INF/jsp/ #后缀 spring.mvc.view.suffix=.jsp

     

    此时访问项目  即可访问jsp

    http://localhost:9001/toLogin

     

     

     

    若还不行

    方案二 :需在方案一的基础上

     

     

     

     

     

     

    上面选择的是你要启动的项目名称,不要选错,下面继续。

     

     

     

     

    3)重启项目之后,刷新页面

    即可

    参考文章

    https://blog.csdn.net/hp_yangpeng/article/details/80521866

    https://blog.csdn.net/news_out/article/details/87863295

    https://blog.csdn.net/qq_26525215/article/details/53726690

     

    在idea中创建文件没有jsp

    参考https://blog.csdn.net/qq_26525215/article/details/53726690

    1.

     

     

    2.

     

     

     

    最新回复(0)