Простая капча на Firefox и IE

Я пытаюсь реализовать простую капчу на моей странице входа. Я создал страницу входа в систему с помощью JSF и простой капчи v1.2.1. Я открыл свою страницу на Chrome. Это работало правильно, но когда я пытаюсь использовать Firefox или IE, изображение с картинки не обновляется. Пожалуйста, скажите мне, что не так в следующем фрагменте. Я что-то пропустил?

Вот моя страница:

<div class="form-group">
    <div class="bungkus-capcay">
       <p:panel id="testPanel" style="border:0;">
          <img alt="captcha image" src="#{request.contextPath}/captcha" id="captchaImage" />
          <h:outputLabel class="control-label" ></h:outputLabel><h:commandLink styleClass="rulycon-loop-2" action="#{loginBacking.generateCaptcha()}" value=""/>
          <h:inputText id="captcha" 
                       value="#{loginBacking.captcha}" 
                       label="captcha"
                        autocomplete="off"
                        style="text-transform: none !important;"
                        styleClass="form-control" />
                    <p:watermark for="captcha" value="captcha"/>                    
       </p:panel>                   
    </div>
</div>
<p:commandButton value="Masuk" 
                 update=":login-form :resultMessages"
                 styleClass="btn btn-kbri"
                 ajax="true" onclick="hash();"
                 action="#{loginBacking.login2()}"
                 />

Вот моя поддержка:

if (captcha != null && !captcha.isEmpty()) {
    do sometihing
} else {            
    captcha = "";
    FacesHelper.addWarnMessage("Gagal", "Captcha tidak boleh kosong");
}

А вот мой код для сгенерированной капчи:

public void generateToken(HttpSession session) {
    final char[] token = generateCaptchaToken();
    List<Color> colorsList = new ArrayList<>();
    Color qnbColor = new Color(137, 0, 80);
    colorsList.add(qnbColor);
    List<Font> fontsList = new ArrayList<>();
    fontsList.add(new Font(Font.SERIF, Font.PLAIN, 46));
    captcha = new Captcha.Builder(160, 60)
            .addText(new DefaultTextProducer(4, token), new DefaultWordRenderer(colorsList, fontsList))
            .addBackground(new FlatColorBackgroundProducer(Color.WHITE))
            .build();
    session.setAttribute("captchaToken", captcha.getAnswer());
    markTokenUsed(session, false);
}

public void setResponseHeaders(HttpServletResponse resp) throws IOException {
    OutputStream out = resp.getOutputStream();
    resp.setContentType("image/jpeg");
    resp.setHeader("Cache-Control", "no-cache, no-store");
    resp.setHeader("Pragma", "no-cache");
    final long time = System.currentTimeMillis();
    resp.setDateHeader("Last-Modified", time);
    resp.setDateHeader("Date", time);
    resp.setDateHeader("Expires", time);
    out.write(convert(captcha.getImage()));

}

Наконец, вот сервлет:

@EJB
private CaptchaManageBean captchaManageBean;

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    final HttpSession session = req.getSession(false);
    final String token = session != null ? captchaManageBean.getToken(session) : null;
    if (token == null || captchaManageBean.isTokenUsed(session)) {
        resp.sendError(HttpServletResponse.SC_NOT_FOUND,
                "Captcha not found.");

        return;
    }
    captchaManageBean.setResponseHeaders(resp);
    captchaManageBean.markTokenUsed(session, true);
}    

На Chrome, если я не введу капчу и нажму кнопку "masuk", появится сообщение, и изображение капчи обновится. Но в Firefox и IE появляется сообщение, изображение капчи не обновляется.

Пожалуйста, дайте мне знать, что не так.

Кстати извините за мой плохой английский.

0 ответов

Другие вопросы по тегам