p:captcha 抛出 - 阻止在 FireFox 上加载混合活动内容

p:captcha throws - Blocked loading mixed active content on FireFox

我在尝试使用 <p:captcha> 时遇到问题。我在 FireFox v34.0.5 中收到以下错误:

Blocked loading mixed active content "http://www.google.com/recaptcha/api/challenge?k=xxxxxxxxxxxxxxxxxxxxxxxxx"

显示复选按钮但未显示验证码图像

我的应用程序托管在安全 (HTTPS) 服务器上,但验证码似乎正在使用 HTTP 连接到不安全的服务器

这是我的 web.xml 文件:

<context-param>
    <param-name>primefaces.PUBLIC_CAPTCHA_KEY</param-name>
    <param-value><xxxxx_recaptcha_generated_public_captcha_key></param-value>
</context-param>
<context-param>
    <param-name>primefaces.PRIVATE_CAPTCHA_KEY</param-name>
    <param-value><xxxxx_recaptcha_generated_private_captcha_key></param-value>
</context-param>

我的视图文件 (forgottenOPassword.xhtml):

<p:captcha label="Captcha" rendered="#{passBB.showCaptcha}"/>

<p:commandButton actionListener="#{passBB.verifyCaptcha}"
                 ajax="false" 
                 icon="ui-icon-check"
                 rendered="#{passBB.showCaptcha}"
                 value="Check"/>

<p:captcha>secure 属性设置为 true。另见 VDL documentation"Enables https support"

<p:captcha ... secure="true" />

或者如果你想让它依赖于当前的请求(例如,当你有 2 个版本的 webapp 并且验证码被放置在一些可重复使用的 tagfile/component 中),那么检查 HttpServletRequest#isSecure() 改为:

<p:captcha ... secure="#{request.secure}" />

无论哪种方式,如果计算结果为 true,则 CaptchaRenderer will use https instead of http