Простая капча на 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 появляется сообщение, изображение капчи не обновляется.
Пожалуйста, дайте мне знать, что не так.
Кстати извините за мой плохой английский.