springboot整合easy-captcha实现图片验证码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot整合easy-captcha实现图片验证码相关的知识,希望对你有一定的参考价值。

参考技术A

使用

1、导入依赖

在maven仓库中查找,发现只有这个依赖,所以直接复制这个即可

<pre data-language="xml" id="IsjaY" class="ne-codeblock" style="border: 1px solid #e8e8e8; border-radius: 2px; background: #f9f9f9; padding: 16px; font-size: 13px; color: #595959">
<dependency>
<groupId>com.github.whvcse</groupId>
<artifactId>easy-captcha</artifactId>
<version>1.6.2</version>
</dependency></pre>

2、使用

总共有这么多种验证类型

3、测试

<pre data-language="java" id="TG4I5" class="ne-codeblock" style="border: 1px solid #e8e8e8; border-radius: 2px; background: #f9f9f9; padding: 16px; font-size: 13px; color: #595959"> public static void main(String[] args)

返回结果:

<pre data-language="java" id="TwqMn" class="ne-codeblock" style="border: 1px solid #e8e8e8; border-radius: 2px; background: #f9f9f9; padding: 16px; font-size: 13px; color: #595959">//算数验证码返回结果
arithmeticString:3x6+5=?
text:23
图片:data:image/png;base64 ....

//中文返回结果
chineseRes:个动来紧
chineseUrl:data:image/png;base64 ...

</pre>

4、最佳实践

可以结合redis,使用uuid作为key,结果作为value存储起来

<pre data-language="java" id="KxZcD" class="ne-codeblock" style="border: 1px solid #e8e8e8; border-radius: 2px; background: #f9f9f9; padding: 16px; font-size: 13px; color: #595959"> @GetMapping(value = "/code")
public ResponseEntity<Object> getCode()
// 算术类型
ArithmeticCaptcha captcha = new ArithmeticCaptcha(111, 36);
// 几位数运算,默认是两位
captcha.setLen(2);
// 获取运算的结果
String result = "";
try
result = new Double(Double.parseDouble(captcha.text())).intValue() + "";
catch (Exception e)
result = captcha.text();

//生成uuid,用于判断
String uuid = properties.getCodeKey() + IdUtil.simpleUUID();

大三东软暑期实训-springboot整合篇

1.整合mybatis

pom.xml:

  <!--
    springboot整合mybatis 框架启动器
    -->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.2.0</version>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.45</version>
    </dependency>

.yml

spring:
  datasource:
    url: jdbc:mysql://localhost:3307/db_ldk?characterEncoding=utf8
    password: 1234
    username: root
    driver-class-name: com.mysql.jdbc.Driver
mybatis:
  mapper-locations: classpath:mappers/*.xml

2.整合德鲁伊连接池

pom.xml

 <!--Druid  数据库连接池-->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.1.10</version>
    </dependency>

.yml:

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource #使用druid连接池
    url: jdbc:mysql://localhost:3306/store?characterEncoding=utf8
    password: root
    username: root
    driver-class-name: com.mysql.jdbc.Driver
    druid: #配置 Druid 的相关参数
      # 初始化大小,最小,最大
      initial-size: 5
      min-idle: 5
      max-active: 20
      max-wait: 60000 # 配置获取连接等待超时的时间
      time-between-eviction-runs-millis: 60000  # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位毫秒
      min-evictable-idle-time-millis: 300000   # 配置一个连接在池中最小生存时间
      validation-query: SELECT 1              #SELECT 1 FROM sys_user
      test-while-idle: true
      test-on-borrow: false
      test-on-return: false
      pool-prepared-statements: true  # 打开 PSCache,并且指定每个连接上 PSCache 的大小
      max-pool-prepared-statement-per-connection-size: 20
      #filters: stat,wall,log4j  # 配置监控统计拦截的 Filter,去掉后监控界面 SQL 无法统计,wall 用于防火墙
      web-stat-filter:    # 配置 DruidStatFilter
        enabled: true
        url-pattern: /*
        exclusions: .js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*
      stat-view-servlet:      # 配置 DruidStatViewServlet
        url-pattern: /druid/*
        # IP 白名单,没有配置或者为空,则允许所有访问
        allow: 127.0.0.1
        # IP 黑名单,若白名单也存在,则优先使用
        deny: 192.168.31.253
        # 禁用 HTML 中 Reset All 按钮
        reset-enable: false
        # 登录用户名/密码
        login-username: root
        login-password: root

3.整合logback 日志

在resources下面创建logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>

    <property name="LOG_FILE_NAME_PATTERN" value="logs/auth.%d{yyyy-MM-dd}.%i.log"/>
    <!-- 日志格式 -->
    <property name="CONSOLE_LOG_PATTERN"
              value="%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%c){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
    <property name="FILE_LOG_PATTERN"
              value="%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %c : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>

    <!--输出到控制台-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <!--输出到文件-->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_FILE_NAME_PATTERN}</fileNamePattern>
            <!-- 日志保留天数 -->
            <maxHistory>366</maxHistory>
            <!-- 日志文件上限大小,达到指定大小后删除旧的日志文件 -->
            <totalSizeCap>2GB</totalSizeCap>

            <!-- 每个日志文件的最大值 -->
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>

        </rollingPolicy>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <!-- (多环境配置日志级别)根据不同的环境设置不同的日志输出级别 -->
    <springProfile name="default,local">
        <root level="info">
            <appender-ref ref="console"/>
        </root>
        <logger name="com.zhl" level="debug"/>
    </springProfile>

    <springProfile name="dev,test">
        <root level="info">
            <appender-ref ref="console"/>
            <appender-ref ref="file"/>
        </root>
        <logger name="com.zhl" level="debug"/>
    </springProfile>

    <springProfile name="product,pre">
        <root level="info">
            <appender-ref ref="console"/>
            <appender-ref ref="file"/>
        </root>
        <logger name="com.zhl" level="debug"/>
    </springProfile>

</configuration>

4.整合jsp

pom.xml:

 <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
    </dependency>

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
        <scope>provided</scope><!--去除打包-->
    </dependency>

5.整合mybatis-plus

注释掉mybatis-spring-boot-starter的依赖

<!--spring整合mybatis-plus -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.0.6</version>
</dependency>

.yml

  #mybatis-plus的配置
mybatis-plus:
  type-aliases-package: edu.xlh.springboot0624_v2.pojo #配置实体别名
  mapper-locations: classpath:mappers/*.xml
  configuration:
    map-underscore-to-camel-case: true  #自动开启驼峰规则映射

6.配置视图解析器:

  mvc:
    view:
      prefix: /WEB-INF/
      suffix: .jsp

7.

与jsp不共存
pom.xml

<!--springboot整合thymeleaf模板技术-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
        <version>2.1.2.RELEASE</version>
    </dependency>

/templates/.html

8.热部署

pom.xml

 <!--支持热部署 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>springloaded</artifactId>
        <version>1.2.8.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
    </dependency>

在这里插入图片描述
在这里插入图片描述
ctrl+alt+shift+/
在这里插入图片描述

9.项目打包

SpringBoot项目在打包的时候,需要考虑一个问题就是,项目是否有jsp页面。如果有jsp页面需要将项目打成war包。如果没有jsp的可以将项目打成jar包(html/thymeleaf)
D盘,java -jar 后面名字打几个再Tab补全

java -jar springboot0624_v2-0.0.1-SNAPSHOT.jar

以上是关于springboot整合easy-captcha实现图片验证码的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot整合Redis 之 lettuce #私藏项目实操分享#

SpringBoot整合Redis,一篇解决缓存的所有问题

SpringBoot整合Redis,一篇解决缓存的所有问题

SpringBoot整合Redis,一篇解决缓存的所有问题

SpringBoot整合Redis,一篇解决缓存的所有问题

SpringBoot整合Redis,一篇解决缓存的所有问题