Expand my Community achievements bar.

Don’t miss the AEM Skill Exchange in SF on Nov 14—hear from industry leaders, learn best practices, and enhance your AEM strategy with practical tips.
SOLVED

How to read Sling model values into Servlet class

Avatar

Level 4

Hello All,

 

I am trying to read Sling model values into servlet class. My sling model is having:

 

@ValueMapValue

@getter 

 public String recaptchaSecretKey;

 

and I am reading it in servlet as below:

ReadForm model = request.adaptTo(ReadForm.class);
String keys = model.recaptchaSecretKey;

 

But this is getting null. Is there any other way to achieve this.

 

1 Accepted Solution

Avatar

Correct answer by
Community Advisor

Hello @supriya-hande 

 

option-1: You should take the reCaptcha out of this component into a separate OSGi service.

Anything reusable should not be part of a component.

 

option-2: You can read configs of different service via Configuration Admin

https://techrevel.blog/2020/09/20/configurationadmin-access-osgi-configuration-of-other-services/ 

So, servlet can read the config from Model ( if its configurable from OSGI)

 

Also, I might be wrong, but I guess a Sling HTTP request cannot be adapted to a Model.

Lets wait if someone can guide or confirm


Aanchal Sikka

View solution in original post

4 Replies

Avatar

Community Advisor

Hi @supriya-hande 
Could you please share what is the use case? and what are the Model and Servlet classes.

 

How does the flow works?



Arun Patidar

Avatar

Level 4

hi @arunpatidar 

There is a task to integrate google reCaptcha module in AEM component. I have created a custom HTML form component and authoring reCaptcha secret and site key in this component. On submit action it invokes reCaptcha execute method and gives token. 

Then I have written a servlet to verify the token and passing the secret key to get response from google. Here I need both token and secret key in the servlet. I am able to get token in this servlet as this is query parameter but am unable to get secret key value from model class. I have implemented this feature by referring: https://aeminmyway.blogspot.com/p/google-recaptcha-v3-in-aem.html

Avatar

Correct answer by
Community Advisor

Hello @supriya-hande 

 

option-1: You should take the reCaptcha out of this component into a separate OSGi service.

Anything reusable should not be part of a component.

 

option-2: You can read configs of different service via Configuration Admin

https://techrevel.blog/2020/09/20/configurationadmin-access-osgi-configuration-of-other-services/ 

So, servlet can read the config from Model ( if its configurable from OSGI)

 

Also, I might be wrong, but I guess a Sling HTTP request cannot be adapted to a Model.

Lets wait if someone can guide or confirm


Aanchal Sikka

Avatar

Level 4

@aanchal-sikka I think 1st option we should use in such cases. I created separate OSGI service to read reCaptcha secret keys and am able to get success response from google server.
Thanks for your help  

@arunpatidar I am able to resolve this. Thanks