При разработке 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. Готово.Можно запускать : )




Комментариев нет:
Отправить комментарий