사양

 - 프레임워크 : Spring 5

 - 빌드 : Maven (XML)

 - 테스트 : Spring Interceptor


※ HttpServletRequest을 기반으로 하여 모바일을 구분하기 위한 문서 입니다


스프링 인터셉터에서 org.springframework.mobile.device.Device 을 사용 하려 하였으나 자료가 나오지 않아서 진행 해보았다.

public static final String IS_MOBILE = "MOBILE"; private static final String IS_PHONE = "PHONE"; public static final String IS_TABLET = "TABLET"; public static final String IS_PC = "PC"; /** * 모바일,타블렛,PC구분 * @param req * @return */ public static String isDevice(HttpServletRequest req) {     String userAgent = req.getHeader("User-Agent").toUpperCase();     if(userAgent.indexOf(IS_MOBILE) > -1) {         if(userAgent.indexOf(IS_PHONE) == -1)     return IS_MOBILE; else     return IS_TABLET;     } else

return IS_PC;

}

전역 함수로 선언해서 사용하면 됨!

기준 자료는 아래 주소에서 참조 하였다.


참조 : User-Agent 정보 목록

https://developers.whatismybrowser.com/useragents/explore/operating_system_name/ios/152




그외에는 또무슨 방법이 있을까?


첫번째. 라이브러리 eu.bitwalker 을 이용한 방법


[메이븐 ]

<!-- https://mvnrepository.com/artifact/eu.bitwalker/UserAgentUtils -->
<!-- https://github.com/HaraldWalker/user-agent-utils -->
<dependency>
	<groupId>eu.bitwalker</groupId>
	<artifactId>UserAgentUtils</artifactId>
	<version>1.21</version>
</dependency>

[JDK]

UserAgent userAgent = UserAgent.parseUserAgentString(request.getHeader("User-Agent")); System.out.println(request.getHeader("User-Agent").toString()); System.out.println(userAgent.getBrowser().toString()); System.out.println(userAgent.getOperatingSystem().toString());




두번째. Spring 기본 제공 org.springframework.mobile.device.Device 을 이용한 방법


[메이븐 ]

<!-- https://mvnrepository.com/artifact/org.springframework.mobile/spring-mobile-device -->
<dependency>
    <groupId>org.springframework.mobile</groupId>
    <artifactId>spring-mobile-device</artifactId>
    <version>1.1.5.RELEASE</version>
</dependency>

[Spring | mvc-config.xml]

<mvc:annotation-driven>
    <mvc:argument-resolvers>
        <bean class="org.springframework.mobile.device.DeviceWebArgumentResolver" />
    </mvc:argument-resolvers>
</mvc:annotation-driven>

<mvc:interceptors>
    <!-- mapping path, exclude-mapping path 는자신에게 맞도록 조정 -->
    <mvc:interceptor>
        <mvc:mapping path="/**"/>
        <mvc:exclude-mapping path="/resources/**" />
        <bean class="org.springframework.mobile.device.DeviceResolverHandlerInterceptor"></bean>
    </mvc:interceptor>
</mvc:interceptors>

[JDK]

@Controller public class HomeController { @RequestMapping(value = { "/" }, method = { org.springframework.web.bind.annotation.RequestMethod.GET }) public String dashboard(Locale locale, Model model, HttpServletRequest req, Device device) throws IOException { if (device.isMobile()) { logger.info("Hello mobile user!"); } else if (device.isTablet()) { logger.info("Hello tablet user!"); } else { logger.info("Hello desktop user!"); } return "home"; } }

실제 적용에 대한 원문 설명 링크
https://docs.spring.io/spring-mobile/docs/current/reference/html/device.html


저의 경우에 맞추어(Spring 5) 적용을 하고 테스트 하였으며 Request 에서 보다 평범하게 간단하게 하기위해 직접 구분 해보았습니다.


원문을 보시면 분류를 더욱 자세하게 확장 하는 방법도 나와 있고 자신에게 맞추어서 설정할려면 원문을 보는 법을 터득하시는게 제일 좋습니다.


PS. 여기까지 읽어 주셔서 감사합니다.



블로그 이미지

촌놈 개발자 일기

개발자로서 살아가는 느낌과 정보를 공유 합니다

,