当前位置: 首页 > 工具软件 > entfrm-boot > 使用案例 >

docker部署spring-boot项目后,验证码获取报错解决

施翰学
2023-12-01

报错信息如下:

2020-10-21 16:13:03.603 ERROR 9 --- [ XNIO-1 task-2] c.e.c.s.handler.GlobalExceptionHandler : 全局异常信息 ex=null


java.lang.NullPointerException: null

at sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264)

at sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:219)

at sun.awt.FontConfiguration.init(FontConfiguration.java:107)

at sun.awt.X11FontManager.createFontConfiguration(X11FontManager.java:774)

at sun.font.SunFontManager$2.run(SunFontManager.java:431)

at java.security.AccessController.doPrivileged(Native Method)

at sun.font.SunFontManager.<init>(SunFontManager.java:376)

at sun.awt.FcFontManager.<init>(FcFontManager.java:35)

at sun.awt.X11FontManager.<init>(X11FontManager.java:57)

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

at java.lang.reflect.Constructor.newInstance(Constructor.java:423)

at java.lang.Class.newInstance(Class.java:442)

at sun.font.FontManagerFactory$1.run(FontManagerFactory.java:83)

at java.security.AccessController.doPrivileged(Native Method)

at sun.font.FontManagerFactory.getInstance(FontManagerFactory.java:74)

at java.awt.Font.getFont2D(Font.java:491)

at java.awt.Font.access$000(Font.java:224)

at java.awt.Font$FontAccessImpl.getFont2D(Font.java:228)

at sun.font.FontUtilities.getFont2D(FontUtilities.java:180)

at sun.java2d.SunGraphics2D.checkFontInfo(SunGraphics2D.java:670)

at sun.java2d.SunGraphics2D.getFontInfo(SunGraphics2D.java:831)

at sun.java2d.pipe.GlyphListPipe.drawString(GlyphListPipe.java:50)

at sun.java2d.pipe.ValidatePipe.drawString(ValidatePipe.java:165)

at sun.java2d.SunGraphics2D.drawString(SunGraphics2D.java:2926)

at cn.hutool.core.img.GraphicsUtil.drawString(GraphicsUtil.java:113)

at cn.hutool.core.img.GraphicsUtil.drawStringColourful(GraphicsUtil.java:77)

at cn.hutool.captcha.LineCaptcha.drawString(LineCaptcha.java:75)

at cn.hutool.captcha.LineCaptcha.createImage(LineCaptcha.java:58)

at cn.hutool.captcha.AbstractCaptcha.createCode(AbstractCaptcha.java:102)

at cn.hutool.captcha.AbstractCaptcha.getCode(AbstractCaptcha.java:126)

at com.entfrm.auth.controller.CaptchaController.randomImage(CaptchaController.java:65)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)

at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)

at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)

at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:892)

at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797)

at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)

at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1039)

at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)

at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005)

at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:897)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:645)

at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:750)

at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74)

at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129)

at com.entfrm.auth.filter.CaptchaFilter.doFilterInternal(CaptchaFilter.java:45)

at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)

at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)

at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:209)

at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178)

at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:357)

at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:270)

at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)

at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)

at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)

at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)

at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)

at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92)

at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)

at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)

at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93)

at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)

at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)

at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)

at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)

at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)

at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)

at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)

at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68)

at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)

at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:132)

at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)

at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)

at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)

at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)

at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)

at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)

at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)

at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)

at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)

at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292)

at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)

at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138)

at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)

at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)

at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)

at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)

at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)

at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)

at io.undertow.server.Connectors.executeRootHandler(Connectors.java:364)

at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:830)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

at java.lang.Thread.run(Thread.java:748)

经过资料查询,大概是字体环境问题

尝试通过在DockerFile中添加代码解决:

apk add --update ttf-dejavu fontconfig

添加后的DockerFile

#V1.0   Dockerfile文件编写
# 基础镜像
FROM openjdk:8-jdk-alpine
# 维护者信息
MAINTAINER 445184148@qq.com
#数据卷
VOLUME /entfrm-boot
#解决时间
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \
&&  echo $TZ > /etc/timezone\
#替换源
&&  echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/main" > /etc/apk/repositories \
&&  echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/community" >> /etc/apk/repositories \
&&  echo "https://mirror.tuna.tsinghua.edu.cn/alpine/edge/testing" >> /etc/apk/repositories\
#安装nginx
&&  apk add  nginx --no-cache\
#安装redis
&&  apk add  redis --no-cache\
#解决验证码获取报错的问题
&&  apk add --update ttf-dejavu fontconfig\
#创建nginx运行基础目录
&&  mkdir -p /run/nginx /var/www/html/entfrm-ui\
#覆盖nginx配置
&&  echo "\
user  root;\
worker_processes  1;\
pid        /var/run/nginx.pid;\
events {\
    worker_connections  1024;\
}\
http {\
    include       /etc/nginx/mime.types;\
    default_type  application/octet-stream;\
    sendfile        on;\
    keepalive_timeout  120;\
    client_max_body_size 20m;\
    gzip  on;\
    server {\
        listen       80;\
        server_name  localhost;\
        location / {\
                root  /var/www/html/entfrm-ui/;\
                try_files \$uri \$uri/ /index.html;\
                index  index.html index.htm;\
        }\
        location /pro/{\
            proxy_pass http://localhost:8888/;\
            proxy_set_header Host \$http_host;\
            proxy_set_header X-Real-IP \$remote_addr;\
            proxy_set_header REMOTE-HOST \$remote_addr;\
            proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;\
        }\
    }\
}" > /etc/nginx/nginx.conf \
#创建启动脚本
&& touch /etc/init.d/start.sh \
&& chmod +x /etc/init.d/start.sh \
&& echo "#!/bin/sh  " >> /etc/init.d/start.sh\
&& echo "/usr/sbin/nginx  -c /etc/nginx/nginx.conf" >> /etc/init.d/start.sh\
&& echo "/usr/bin/redis-server  &  " >> /etc/init.d/start.sh\
&& echo "java -jar /entfrm-web.jar " >> /etc/init.d/start.sh
#添加前端文件
ADD entfrm-ui/dist/ /var/www/html/entfrm-ui/
#添加应用
ADD entfrm-web/target/entfrm-web.jar entfrm-web.jar

#开放端口
EXPOSE  80  8888
#启动
ENTRYPOINT /bin/sh -c   /etc/init.d/start.sh

entfrm entfrm:v1.0

 

重新制作镜像,并运行,问题解决!

 类似资料: