0

Im using jboss server and primefaces also. I want to use google captcha for my login page. At First it's ok and the captcha showed up, but I want capctha public key and private key stored in properties file. I was made a configuration like this :

web.xml

   <listener>       
        <listener-class>
            com.putra.web.CaptchaConfig
        </listener-class>
    </listener>
    <context-param>
        <param-name>primefaces.PRIVATE_CAPTCHA_KEY</param-name> <!-- SECRET KEY -->
        <param-value>${PRIVATE_CAPTCHA_KEY}</param-value>
    </context-param>
    <context-param>
        <param-name>primefaces.PUBLIC_CAPTCHA_KEY</param-name> <!-- PUBLIC KEY -->
        <param-value>${PUBLIC_CAPTCHA_KEY}</param-value>
    </context-param>

CaptchaConfig.java

public class CaptchaConfig implements ServletContextListener {
    
    private static final Logger LOG = LoggerFactory.getLogger(CaptchaConfig.class);
    
    @Override
    public void contextDestroyed(final ServletContextEvent event) {
    }
    
    @Override
    public void contextInitialized(final ServletContextEvent event) {
        final String props = "/captcha.properties";
        final Properties propsFromFile = new Properties();
        try {
            LOG.info("### Load captcha config file ###");
            propsFromFile.load(getClass().getResourceAsStream(props));
            
        } catch (final IOException e) {
            LOG.info("### Error load captcha config file ###");
        }
        for (String prop : propsFromFile.stringPropertyNames()) {
            LOG.info("### Properties Name : {} ###", prop);
            LOG.info("### Properties Value : {} ###", propsFromFile.getProperty(prop));
            System.setProperty(prop, propsFromFile.getProperty(prop));
        }
    }
    
}

captcha.properties

PRIVATE_CAPTCHA_KEY=6Lc2QvgdAAAAAC9rcBbP2RfvVXPf2_xxxxxxxxxx
PUBLIC_CAPTCHA_KEY=6Lc2QvgdAAAAAH2Psp5-ILyWLenJJ4xxxxxxxxxx

I got no error when running the project but the problem is the captcha doesn't show up. What's wrong?

muhkanda
  • 319
  • 1
  • 9
  • Check that `web.xml` contains the proper version in its header (according to the Java Servlet version is using your server). Can you post your `web.xml` header and the version of the server? – gmanjon Jan 17 '22 at 17:40

1 Answers1

0

Solved by change :

<spec-descriptor-property-replacement>
    false
</spec-descriptor-property-replacement>

to

<spec-descriptor-property-replacement>
    true
</spec-descriptor-property-replacement>

on my standalone-full.xml. Thank you!

muhkanda
  • 319
  • 1
  • 9