Skip to content

A Spring user-agent resolver for server-side detection of browser and operating system.

License

Notifications You must be signed in to change notification settings

theborakompanioni/tbk-spring-useragentutils

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Build Status GitHub Release Maven Central License

tbk-spring-useragentutils

A Spring user-agent resolver for server-side detection of browser and operating system.

Download

Maven

<dependency>
    <groupId>com.github.theborakompanioni</groupId>
    <artifactId>spring-useragentutils</artifactId>
    <version>${tbk-spring-useragentutils.version}</version>
</dependency>

Usage

Create a UserAgentResolverHandlerInterceptor and a UserAgentHandlerMethodArgumentResolver bean.

Example Configuration

@Configuration
public class SpringUserAgentUtilsConfiguration extends WebMvcConfigurerAdapter {

    @Bean
    public UserAgentResolverHandlerInterceptor userAgentResolverHandlerInterceptor() {
        return new UserAgentResolverHandlerInterceptor();
    }

    @Bean
    public UserAgentHandlerMethodArgumentResolver userAgentHandlerMethodArgumentResolver() {
        return new UserAgentHandlerMethodArgumentResolver();
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(userAgentResolverHandlerInterceptor());
    }

    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
        argumentResolvers.add(userAgentHandlerMethodArgumentResolver());
    }
}

Example Controller

The following example shows a controller returning a resolved UserAgent object either from a given User-Agent string or resolved from the requesting client:

@RestController
@RequestMapping("/app/rest/useragent")
public class UserAgentCtrl {

    @Builder
    @Value
    private static class UserAgentResource {
        private Browser browser;
        private BrowserType browserType;
        private OperatingSystem operatingSystem;
        private OperatingSystem operatingSystemGroup;
        private DeviceType deviceType;
    }

    @RequestMapping(method = RequestMethod.GET)
    public ResponseEntity<UserAgentResource> userAgent(
        @RequestParam(value = "userAgent", required = false) String userAgentString,
        UserAgent clientUserAgent
    ) {
        UserAgent userAgent = Strings.isNullOrEmpty(userAgentString) ? clientUserAgent :
            UserAgent.parseUserAgentString(userAgentString);

        Browser browser = userAgent.getBrowser();
        OperatingSystem operatingSystem = userAgent.getOperatingSystem();

        UserAgentResource resource = UserAgentResource.builder()
            .browser(browser)
            .browserType(browser.getBrowserType())
            .operatingSystem(operatingSystem)
            .operatingSystemGroup(operatingSystem.getGroup())
            .deviceType(operatingSystem.getDeviceType())
            .build();

        return ResponseEntity.ok(resource);
    }
}

Request URL: http://localhost:8080/app/rest/useragent Returns the client user agent, e.g.:

{
  "browser": "FIREFOX36",
  "browserType": "WEB_BROWSER",
  "operatingSystem": "LINUX",
  "operatingSystemGroup": "LINUX",
  "deviceType": "COMPUTER"
}

Request URL: http://localhost:8080/app/rest/useragent?userAgent=Mozilla%2F5.0%20(compatible%3B%20MSIE%2010.0%3B%20Windows%20NT%206.1%3B%20Trident%2F4.0%3B%20InfoPath.2%3B%20SV1%3B%20.NET%20CLR%202.0.50727%3B%20WOW64)

{
  "browser": "IE10",
  "browserType": "WEB_BROWSER",
  "operatingSystem": "WINDOWS_7",
  "operatingSystemGroup": "WINDOWS",
  "deviceType": "COMPUTER"
}

License

The project is licensed under the MIT license. See LICENSE for details.

About

A Spring user-agent resolver for server-side detection of browser and operating system.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages