linux下图形验证码显示问题
作者:mobiledu2502855247 | 来源:互联网 | 2017-11-09 23:20
linux下图形验证码显示问题--Linux通用技术-Linux技术与应用信息,下面是详情阅读。
发现很多人问这个问题,我也是从网上搜到的答案。在这里和大家共享一下:
解决方案1:
在java启动参数中增加-Djava.awt.headless=true 就可以了。以tomcat为例,就是在tomcat的bin目录下找到catalina.sh。打开后可以看到有很多-D的地方就是启动参数了。在所有的分支中都加上-Djava.awt.headless=true就可以了。下面是一段catalina.sh的例子代码:
-Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
-sourcepath "$CATALINA_HOME"/../../jakarta-tomcat-catalina/catalina/src/share \
-Djava.security.manager \
-Djava.security.policy=="$CATALINA_BASE"/conf/catalina.policy \
-Dcatalina.base="$CATALINA_BASE" \
-Dcatalina.home="$CATALINA_HOME" \
-Djava.awt.headless=true \
-Djava.io.tmpdir="$CATALINA_TMPDIR" \
org.apache.catalina.startup.Bootstrap "$@" start
你需要做的就是加入粗题那一行。
还是不行,再想办法.
package com.genius.util;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
public final class ValidateImage implements Controller {
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
//在内存中创建图象
int iWidth = 70, iHeight = 16;
BufferedImage image = new BufferedImage(iWidth, iHeight,
BufferedImage.TYPE_INT_RGB);
//获取图形上下文
Graphics g = image.getGraphics();
//设定背景色
g.setColor(Color.white);
g.fillRect(0, 0, iWidth, iHeight);
//画边框
g.setColor(Color.black);
g.drawRect(0, 0, iWidth - 1, iHeight - 1);
//取随机产生的认证码(4位数字)
String rand = request.getParameter("rand");
rand = rand.substring(0, rand.indexOf("."));
switch (rand.length()) {
case 1:
rand = "000" + rand;
break;
case 2:
rand = "00" + rand;
break;
case 3:
rand = "0" + rand;
break;
default:
rand = rand.substring(0, 4);
break;
}
//将认证码存入SESSION
session.setAttribute("rand", rand);
//将认证码显示到图象中
g.setColor(Color.black);
g.setFont(new Font("Times New Roman", Font.PLAIN, 18));
g.drawString(rand, 10, 15);
//随机产生200个干扰点,使图象中的认证码不易被其它程序探测到
Random random = new Random();
for (int iIndex = 0; iIndex <200; iIndex++) {
int x = random.nextInt(iWidth);
int y = random.nextInt(iHeight);
g.drawLine(x, y, x, y);
}
//图象生效
g.dispose();
//输出图象到页面
ImageIO.write(image, "JPEG", response.getOutputStream());
return new ModelAndView();
}
}
解决方案2:我把它修改为
package com.genius.util;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
public final class ValidateImage implements Controller {
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
//在内存中创建图象
int iWidth = 70, iHeight = 16;
BufferedImage image = new BufferedImage(iWidth, iHeight,
BufferedImage.TYPE_INT_RGB);
//获取图形上下文
Graphics g = image.getGraphics();
//设定背景色
g.setColor(Color.white);
g.fillRect(0, 0, iWidth, iHeight);
//画边框
g.setColor(Color.black);
g.drawRect(0, 0, iWidth - 1, iHeight - 1);
//取随机产生的认证码(4位数字)
String rand = request.getParameter("rand");
rand = rand.substring(0, rand.indexOf("."));
switch (rand.length()) {
case 1:
rand = "000" + rand;
break;
case 2:
rand = "00" + rand;
break;
case 3:
rand = "0" + rand;
break;
default:
rand = rand.substring(0, 4);
break;
}
//将认证码存入SESSION
session.setAttribute("rand", rand);
//将认证码显示到图象中
g.setColor(Color.black);
g.setFont(new Font("Times New Roman", Font.PLAIN, 18));
g.drawString(rand, 10, 15);
//随机产生200个干扰点,使图象中的认证码不易被其它程序探测到
Random random = new Random();
for (int iIndex = 0; iIndex <200; iIndex++) {
int x = random.nextInt(iWidth);
int y = random.nextInt(iHeight);
g.drawLine(x, y, x, y);
}
//图象生效
g.dispose();
//输出图象到页面
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(response.getOutputStream());
encoder.encode(image);
return new ModelAndView();
}
}
修改后成功,,,
推荐阅读
-
本文介绍了Tomcat的安装与配置教程,包括jdk版本的选择、域名解析、war文件的部署和访问、常见问题的解决方法等。其中涉及到的问题包括403问题、数据库连接问题、1130错误、2003错误、Java Runtime版本不兼容问题以及502错误等。最后还提到了项目的前后端连接代码的配置。通过本文的指导,读者可以顺利完成Tomcat的安装与配置,并解决常见的问题。 ...
[详细]
蜡笔小新 2023-12-09 07:28:32
-
这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ...
[详细]
蜡笔小新 2023-12-14 16:19:10
-
-
本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ...
[详细]
蜡笔小新 2023-12-14 15:52:03
-
本文介绍了一些Java开发项目管理工具及其配置教程,包括团队协同工具worktil,版本管理工具GitLab,自动化构建工具Jenkins,项目管理工具Maven和Maven私服Nexus,以及Mybatis的安装和代码自动生成工具。提供了相关链接供读者参考。 ...
[详细]
蜡笔小新 2023-12-13 06:45:16
-
随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ...
[详细]
蜡笔小新 2023-12-10 20:05:15
-
本文介绍了一款名为Android日历提醒软件的开源项目,作者分享了该项目的代码和使用教程,并提供了GitHub项目地址。文章详细介绍了该软件的主界面风格、日程信息的分类查看功能,以及添加日程提醒和查看详情的界面。同时,作者还提醒了读者在使用过程中可能遇到的Android6.0权限问题,并提供了解决方法。 ...
[详细]
蜡笔小新 2023-12-10 19:01:03
-
本文介绍了在Centos7上搭建ELK(Elasticsearch、Logstash、Kibana)的详细步骤,包括下载安装包、安装Elasticsearch、创建用户、修改配置文件等。同时提供了使用华为镜像站下载安装包的方法,并强调了保证版本一致的重要性。 ...
[详细]
蜡笔小新 2023-12-10 16:27:21
-
本文主要分析了Netty源代码中服务器端启动的过程,包括ServerBootstrap的初始化和相关参数的设置。通过分析NioEventLoopGroup、NioServerSocketChannel、ChannelOption.SO_BACKLOG等关键组件和选项的作用,深入理解Netty服务器端的启动过程。同时,还介绍了LoggingHandler的作用和使用方法,帮助读者更好地理解Netty源代码。 ...
[详细]
蜡笔小新 2023-12-10 15:42:28
-
本文讨论了在shiro java配置中加入Shiro listener后启动失败的问题。作者引入了一系列jar包,并在web.xml中配置了相关内容,但启动后却无法正常运行。文章提供了具体引入的jar包和web.xml的配置内容,并指出可能的错误原因。该问题可能与jar包版本不兼容、web.xml配置错误等有关。 ...
[详细]
蜡笔小新 2023-12-10 09:43:05
-
http:valor-software.comng2-bootstraphttps:www.primefaces.orgprimeng#autocomplete转载于:https: ...
[详细]
蜡笔小新 2023-12-09 20:57:51
-
本文详细介绍了在SpringBoot中使用Java导入和导出Excel文件的方法和步骤,包括添加操作Excel的依赖、自定义注解等。文章还提供了示例代码,并将代码上传至GitHub供访问。 ...
[详细]
蜡笔小新 2023-12-09 20:27:00
-
本文讨论了使用bootstrapselect插件设置container后,选择完选项后options不隐藏的问题,给出了解决方法,并提供了相应的jsfiddle链接进行演示。 ...
[详细]
蜡笔小新 2023-12-09 17:18:48
-
本文总结了初学者在使用dubbo设计架构过程中遇到的问题,并提供了相应的解决方法。问题包括传输字节流限制、分布式事务、序列化、多点部署、zk端口冲突、服务失败请求3次机制以及启动时检查。通过解决这些问题,初学者能够更好地理解和应用dubbo设计架构。 ...
[详细]
蜡笔小新 2023-12-09 10:07:18
-
主讲人网神(新浪微博:豆角茄子麻酱凉面)网神(66707180)18:57:18大家好,今天我们讲一下第14章combiningmodel ...
[详细]
蜡笔小新 2023-10-17 17:04:24
-
本文摘要配置目的:寄存器配置用于更改路由器启动过程。配置目的:寄存器配置用于更改路由器启动过程。启动位由4位16进制寄存器组成格式:0xA ...
[详细]
蜡笔小新 2023-10-16 19:59:28
-
mobiledu2502855247
这个家伙很懒,什么也没留下!