1

我正在为我的 java 应用程序使用 simpleCatcha 插件。生成的验证码图像不可读,因此我想更改图像样式。有什么方法可以自定义或更改图像的样式。HTML是:

<img id="captcha" src="<c:url value="simpleCaptcha.jpg" />" width="150">

web.xml 是:

<display-name>captcha</display-name>
<servlet>
    <servlet-name>SimpleCaptcha</servlet-name>
    <servlet-class>nl.captcha.servlet.SimpleCaptchaServlet</servlet-class>      
</servlet>
<servlet-mapping>
    <servlet-name>SimpleCaptcha</servlet-name>
    <url-pattern>/simpleCaptcha.jpg</url-pattern>
</servlet-mapping>

<welcome-file-list>
    <welcome-file>simpleCaptcha.jsp</welcome-file>
</welcome-file-list>

页面导入是:

<%@ page import="nl.captcha.Captcha"%>

我已经使用这个插件进行验证

4

3 回答 3

1

如果您检查 、 和 的源代码,nl.captcha.servlet.SimpleCaptchaServlet并且已经预定义。这可以在 simplecaptcha-1.1.1.jar 中找到。下面的屏幕截图供您参考。widthheightFontColors

SimpleCaptchaServlet

关于边缘词渲染器,这是在 class & others 中处理的,它们对,等ColoredEdgesWordRenderer进行一些计算,并达到应该显示验证码单词的角度。xBaselineyBaselineshape

我敢打赌,要实现您想要的,您要么需要编辑源代码并制作自己的 jar 并重新部署。这是因为参数不是从web.xml文件中获取的。或者寻找其他一些您认为更容易识别文本的验证码。但是,建议是,您的验证码看起来越复杂,它会增加越多的安全性。

彩色边缘

于 2013-05-30T05:24:29.133 回答
1

您可以使用自己的 servlet 覆盖SimpleCaptchaServlet并改用它。然后您应该能够删除和更改背景或噪音或边框

例子:

.addBackground(new FlatColorBackgroundProducer(Color.LIGHT_GRAY)) 

或者

GradiatedBackgroundProducer bg = new GradiatedBackgroundProducer();
bg.setFromColor(Color.white);
bg.setToColor(Color.yellow);
.addBackground(bg)
于 2013-07-19T20:13:01.520 回答
0

如果有人仍在寻找解决方案,请像下面那样扩展 SimpleCaptchaServlet 并将这个新的 servlet 映射到 web.xml 中。这对我有用

public class MySimpleCaptcha extends SimpleCaptchaServlet {

    private static final String PARAM_HEIGHT = "height";
    private static final String PARAM_WIDTH = "width";
    protected int _width = 200;
    protected int _height = 50;

    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Captcha captcha = new Captcha.Builder(_width, _height)
            .addText()
            .addBackground(new GradiatedBackgroundProducer())

            // Add here whatever you need

            .addNoise()
            .gimp(new DropShadowGimpyRenderer())
            .addBorder()
            .build();

        CaptchaServletUtil.writeImage(resp, captcha.getImage());
        req.getSession().setAttribute(NAME, captcha);
     }

 }
于 2016-12-22T10:15:33.473 回答