Info-System

Integracja Seam i Recaptcha

Email PDF

Jednym z moich ulubionych frameworków jest Jboss seam, bardzo mi przypadł do gustu projekt recaptcha (zabezpieczenei przed spamem, które pomaga cyfryzyować książki). Zatem połączenie obu tych rozwiązań było dla mnie tylko kwestią czasu. W dodatku okazało się banalnie łatwe o czym zaraz się przekonamy. Należy wykonać następujące kroki:

  1. Pobrać małą bibliotekę Java-Recaptcha (stworzoną przez niejakiego Sorena).
  2. Dodać pobranego jara recaptcha4j-0.0.7.jar do CLASS_PATH aplikacji seamowej.
  3. Następnie stworzyć sobie małą i prostą klasę narzędziową, która integruje seam oraz recaptcha. Kod wygląda tak:
    package com.infosystem.server.util;
                    
    import javax.servlet.http.HttpServletRequest;
    
    import org.jboss.seam.web.ServletContexts;
    
    import net.tanesha.recaptcha.ReCaptcha;
    import net.tanesha.recaptcha.ReCaptchaFactory;
    import net.tanesha.recaptcha.ReCaptchaResponse;
    
    public class RecaptchaUtils {
    
        private static final String PUBLIC_KEY = "your public key";
        private static final String PRIVATE_KEY = "your private key";
        private static ReCaptcha reCaptcha = ReCaptchaFactory.newReCaptcha(PUBLIC_KEY,
                PRIVATE_KEY, false);
        
      public static String createRecaptchaHtml(String error) {
            Properties options = new Properties();
            options.setProperty("theme", "mytheme");
            options.setProperty("tabindex", "1");
            return reCaptcha.createRecaptchaHtml(error, options);
        }
    
        public static ReCaptchaResponse getRecaptchaRespoonse(String challenge,
                String response, String remoteAddress) {
            ReCaptchaResponse answer = reCaptcha.checkAnswer(remoteAddress,
                    challenge, response);
            return answer;
        }
    
        public static ReCaptchaResponse getRecaptchaResponseFromServletContext() {
            HttpServletRequest reqest = ServletContexts.instance().getRequest();
            return getRecaptchaRespoonse(reqest
                    .getParameter("recaptcha_challenge_field"), reqest
                    .getParameter("recaptcha_response_field"), reqest
                    .getRemoteAddr());
        }
        
    }
    Jeśli potrzebujemy więcej kontroli nad właściwościami, to wystarczy napisać metodę o większym poziomie skomplikowania.
  4. Aby dodać recaptcha na seam'owej stronie użyłem metody "createRecaptchaHtml" wywołaną z mojego małego ziarna (bean'a), która jest dobrą bazą do podłączenia bardziej skomplikowanej logiki.
    package com.infosystem.forms.session;
    
    import static org.jboss.seam.ScopeType.EVENT;
    import javax.ejb.Stateless;
    import org.jboss.seam.annotations.Name;
    import org.jboss.seam.annotations.Scope;
    import com.infosystem.seam.util.RecaptchaUtils;
    
    @Stateless
    @Scope(EVENT)
    @Name("captcha")
    public class CaptchaImpl implements Captcha {
    
        public String getHtml() {
            //Twoja logika np. ustawianie właściwości
            return RecaptchaUtils.createRecaptchaHtml("Error");
        }
    
    }
  5. Dodanie recaptcha do strony jest proste:
      <h:form>

    ....

    <h:outputText value="#{captcha.html}" escape="false" />

    ...

    </h:form> ...
  6. Gotowe

Jeśli coś nie jest jasne, proszę o kontakt, może uda mi się pomóc.

Dodaj komentarz


Kod antysapmowy
Odśwież

Joomlart