При разработке ADF проектов часто может возникнуть необходимость создать регистрацию пользователей. И что бы обезопасить эту часть проекта от ботов, используют Капчу. Капча - компьютерный тест, используемый для того, чтобы определить, кем является пользователь системы: человеком или компьютером. В этой статье я хочу показать как встроить ее в ADF проект (исходных код приложения можно скачать на github: https://github.com/JealousyM/captcha-adf ).
1. Создайте Fusion ADF приложение. В нем создайте jspx страницу со следующими компонентами:
2. Создайте ManagedBean, например с именем captchaBean
3. Скачайте jar с сайта http://simplecaptcha.sourceforge.net
4. Добавьте его в проект
5. Добавьте следующий код в web.xml( при помощи этого кода вы добавите сервлет скачанный ранее)
6. Создайте биндинги для inlineFrame, panelGroupLayout и inputText (первые два для обновления страницы с кода, а к inputtext для извлечения введенных данных. Так же создайте методы для кнопок.
7. Добавьте код в бине для проверки введенных данных и обновления картинки:
8. Готово.Можно запускать : )
1. Создайте Fusion ADF приложение. В нем создайте jspx страницу со следующими компонентами:
- inlineFrame - компонент для отображения капчи
- 2 commandToolbarButton. Первая для обновления капчи, если она не разборчива.Вторая для обработки введенных данных.
- inputText - компонент для ввода данных которые вы увидели в капче.
- group layout - компонент для группировки элементов страницы.
2. Создайте ManagedBean, например с именем captchaBean
3. Скачайте jar с сайта http://simplecaptcha.sourceforge.net
4. Добавьте его в проект
5. Добавьте следующий код в web.xml( при помощи этого кода вы добавите сервлет скачанный ранее)
<servlet>
<servlet-name>CaptchaServlet</servlet-name>
<servlet-class>nl.captcha.servlet.SimpleCaptchaServlet</servlet-class>
<init-param>
<param-name>width</param-name>
<param-value>250</param-value>
</init-param>
<init-param>
<param-name>height</param-name>
<param-value>75</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>CaptchaServlet</servlet-name>
<url-pattern>/captchaservlet</url-pattern>
</servlet-mapping>
6. Создайте биндинги для inlineFrame, panelGroupLayout и inputText (первые два для обновления страницы с кода, а к inputtext для извлечения введенных данных. Так же создайте методы для кнопок.
<af:panelGroupLayout id="pgl1" layout="vertical" halign="center"
binding="#{captchaBean.pgl}" valign="top">
<af:inlineFrame id="if1" source="/captchaservlet"
binding="#{captchaBean.iframe}"
clientComponent="true"
inlineStyle="height:90px; width:230.0px;"/>
<af:commandButton text="Не вижу Captch-у" id="cb1"
partialSubmit="true" immediate="true"
actionListener="#{captchaBean.refresh}"/>
<af:inputText id="it1" binding="#{captchaBean.inputText}"/>
<af:commandButton text="Проверить" id="cb2"
actionListener="#{captchaBean.checkAnswer}"
partialSubmit="true"/>
</af:panelGroupLayout>
7. Добавьте код в бине для проверки введенных данных и обновления картинки:
public void checkAnswer(ActionEvent actionEvent) { FacesContext fctx = FacesContext.getCurrentInstance(); ExternalContext ectx = fctx.getExternalContext(); HttpServletRequest request = (HttpServletRequest) ectx.getRequest(); Captcha captcha = (Captcha) ectx.getSessionMap().get(Captcha.NAME); try { request.setCharacterEncoding("UTF-8"); } catch (UnsupportedEncodingException e) { System.out.println("UTF не поддерживается !"); } String answer = (String)inputText.getValue(); if (answer != null && captcha.isCorrect(answer)){ fctx.addMessage(null,new FacesMessage(FacesMessage.SEVERITY_INFO,"Введена правильная Captcha. Урааа!!",null)); } else{ fctx.addMessage(null,new FacesMessage(FacesMessage.SEVERITY_INFO,"Ошибка.Всмотритесь внимательней в Captch-у",null)); AdfFacesContext.getCurrentInstance().addPartialTarget(pgl); } } public void refresh(ActionEvent actionEvent) { AdfFacesContext.getCurrentInstance().addPartialTarget(iframe); }
8. Готово.Можно запускать : )
Комментариев нет:
Отправить комментарий