Your achievements

Level 1

0% to

Level 2

Tip /
Sign in

Sign in to Community

to gain points, level up, and earn exciting badges like the new
BedrockMission!

Learn more

View all

Sign in to view all badges

SOLVED

How to get browser details in AEM Servlet?

Anderson_Hamer
Level 4
Level 4

I am trying to get browser name in servlet but it is giving me all browser details. Is there any way to get accurate browser name ?

 

String browserName = req.getHeader("User-Agent");
String secNa = req.getHeader("sec-ch-ua");
LOG.info("browserName !!!!!!!"+browserName);
LOG.info("secNa !!!!!!!"+secNa);

Below are log info

FF browser:-
browserName !!!!!!!Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Firefox/91.0
secNa !!!!!!! null


Chrome brwoser
browserName !!!!!!!Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36
secNa !!!!!!!"Chromium";v="92", " Not A;Brand";v="99", "Google Chrome";v="92"


Opera brwoser :-
browserName !!!!!!!Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 OPR/78.0.4093.147
secNa !!!!!!!" Not A;Brand";v="99", "Chromium";v="92", "Opera";v="78"

1 Accepted Solution
VKumar2
Correct answer by
Level 2
Level 2

Hi @Anderson_Hamer  - There are couple of options which you might try to sort out this one. First way is a lengthy way to parse the string(User Agent) and extract the desired result.

Another way you can include below JS file to your AEM code and pass the agent in Ajax call to the servlet or using hidden variable in HTL.

 

Sample code would be like below (change to AEM specific)

JS File :: https://github.com/bestiejs/platform.js

<script src="platform.js"></script>
<script>
var os = platform.os;
var browser = platform.name + ' ' + platform.version;
</script>

 

Alternatively you an include the Java dependency in your AEM pom.xml file and get the exact browser name:

 

<dependency>
<groupId>user-agent-utils</groupId>
<artifactId>user-agent-utils</artifactId>
<version>1.2.3</version>
</dependency>

 

String userAgent = req.getHeader("user-agent");
UserAgent ua = UserAgent.parseUserAgentString(userAgent);
String browserName = ua.getBrowser().toString();

 

Thanks,

View solution in original post

8 Replies
sachinn20956098
Level 2
Level 2

You will have to parse the User-Agent Header to identify the browser name. You can chose to use a java java library instead of writing this block of logic yourself since you need to actively maintain it. 

rampai
Level 4
Level 4

Hi @Anderson_Hamer,

 

Can't you check this using javascript instead?

 

Or you can try to apply the below checks using String API in Java.

 

Could you please check if this helps?

https://www.google.com/amp/s/www.geeksforgeeks.org/how-to-detect-the-user-browser-safari-chrome-ie-f...

 

Thanks, 

Ram

 

RitendraS11
Level 2
Level 2

In JAVA, you need to parse the user-agent string. It can be done by writing a parser of your own, which will lead to maintain it as well. The best recommended way would be to use a dependency as - 

<dependency>
  <groupId>com.blueconic</groupId>
  <artifactId>browscap-java</artifactId>
  <version>1.3.6</version>
</dependency>

 You can check more details from here - https://github.com/blueconic/browscap-java

Hope, this might help!

VKumar2
Correct answer by
Level 2
Level 2

Hi @Anderson_Hamer  - There are couple of options which you might try to sort out this one. First way is a lengthy way to parse the string(User Agent) and extract the desired result.

Another way you can include below JS file to your AEM code and pass the agent in Ajax call to the servlet or using hidden variable in HTL.

 

Sample code would be like below (change to AEM specific)

JS File :: https://github.com/bestiejs/platform.js

<script src="platform.js"></script>
<script>
var os = platform.os;
var browser = platform.name + ' ' + platform.version;
</script>

 

Alternatively you an include the Java dependency in your AEM pom.xml file and get the exact browser name:

 

<dependency>
<groupId>user-agent-utils</groupId>
<artifactId>user-agent-utils</artifactId>
<version>1.2.3</version>
</dependency>

 

String userAgent = req.getHeader("user-agent");
UserAgent ua = UserAgent.parseUserAgentString(userAgent);
String browserName = ua.getBrowser().toString();

 

Thanks,

View solution in original post

BrianKasingli
Community Advisor
Community Advisor

You can try this library, https://github.com/ua-parser/uap-java

import ua_parser.Parser;
import ua_parser.Client;

...

String uaString = "Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3";

Parser uaParser = new Parser();
Client c = uaParser.parse(uaString);

System.out.println(c.userAgent.family); // => "Mobile Safari"
System.out.println(c.userAgent.major);  // => "5"
System.out.println(c.userAgent.minor);  // => "1"

System.out.println(c.os.family);        // => "iOS"
System.out.println(c.os.major);         // => "5"
System.out.println(c.os.minor);         // => "1"

System.out.println(c.device.family);    // => "iPhone"
Rohit_Utreja
Level 4
Level 4

Hi @Anderson_Hamer ,

Please refer brloe thread to extract browser information in JAVA code.
https://stackoverflow.com/questions/1326928/how-can-i-get-client-information-such-as-os-and-browser/...

 

UserAgent userAgent = UserAgent.parseUserAgentString(request.getHeader("User-Agent"));
    Browser browser = userAgent.getBrowser();

    String browserName = browser.getName();
    //or 
    // String browserName = browser.getGroup().getName();
    Version browserVersion = userAgent.getBrowserVersion();
    System.out.println("The user is using browser " + browserName + " - version " + browserVersion);