PRoblemas com JCaptcha e Segurança da JVM

Olá pessoal…

Estou utilizando o JCaptcha para fazer a validação de Captcha em um formulário de e-mail…

Tudo funciona normalmente em ambiente de desenvolvimento.
Porém, ao subir a aplicação para produção, o ocorre o problema. No formulário, a imagem não aparece (fica “quebrada”). Tentando acessar a URL da imagem http://www.atom.com.br/captcha.html recebo a seguinte exception:

com.octo.captcha.CaptchaException: access denied (java.util.PropertyPermission * read,write)
	com.octo.captcha.image.gimpy.GimpyFactory.getImageCaptcha(GimpyFactory.java:79)
	com.octo.captcha.image.ImageCaptchaFactory.getCaptcha(ImageCaptchaFactory.java:37)
	com.octo.captcha.engine.GenericCaptchaEngine.getNextCaptcha(GenericCaptchaEngine.java:67)
	com.octo.captcha.service.AbstractCaptchaService.generateAndStoreCaptcha(AbstractCaptchaService.java:148)
	com.octo.captcha.service.AbstractManageableCaptchaService.generateCountTimeStampAndStoreCaptcha(AbstractManageableCaptchaService.java:339)
	com.octo.captcha.service.AbstractManageableCaptchaService.generateAndStoreCaptcha(AbstractManageableCaptchaService.java:328)
	com.octo.captcha.service.AbstractCaptchaService.getChallengeForID(AbstractCaptchaService.java:64)
	com.octo.captcha.service.multitype.GenericManageableCaptchaService.getImageChallengeForID(GenericManageableCaptchaService.java:66)
	br.com.atom.cms.web.controller.JCaptchaController.handleRequest(JCaptchaController.java:37)
	org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:44)
	org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:723)
	org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:663)
	org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:394)
	org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:348)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	java.lang.reflect.Method.invoke(Method.java:585)
	org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:243)
	java.security.AccessController.doPrivileged(Native Method)
	javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
	org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:275)
	org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:161)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5 logs.

Como dá pra ver, o problema ocorre em
" access denied (java.util.PropertyPermission * read,write) "

Ao meu ver, isso está ocorrendo por que o JCaptcha está tentando, por algum motivo, alterar as propriedades da JVM. Não sei que motivo é esse. Este problema só ocorre em ambiente de produção porque o site está num servidor compartilhado, com a JVM compartilhada, e então eles negam as permissões de escrita na JVM. Eles me disseram que não há como liberar estas permissões para ambientes compartilhados.

Gostaria de saber se alguém já passou por este problema, e se tem algum jeito de “configurar” o JCaptcha para não fazer estas alterações na JVM (se é que ele funcionará sem isso…).

Obrigado!

Como o fonte está disponível, você poderia procurar por alguma das chamadas:

System.setProperty

System.getProperty

System.properties

Normalmente não se nega o uso de System.getProperty para todas as propriedades, mas apenas para algumas. Talvez você possa mexer no fonte do JCaptcha e “bitolar” ou “ler” algumas das propriedades que ele tenta ler a partir de um arquivo “.properties” de sua aplicação.