Android和springboot数据,spring boot 判断请求是不是android

这个博客内容描述了一个名为`LiteDeviceResolver`的类,该类用于解析HTTP请求中的User-Agent头来确定设备类型,如移动设备、平板或正常设备。它通过检查User-Agent前缀、关键词以及Accept头来识别设备。初始化时,类会加载已知的设备标识字符串。如果无法匹配到移动设备,则返回正常的设备实例。
摘要由CSDN通过智能技术生成

public class LiteDeviceResolver implements DeviceResolver {

private final List mobileUserAgentPrefixes = new ArrayList();

private final List mobileUserAgentKeywords = new ArrayList();

private final List tabletUserAgentKeywords = new ArrayList();

private final List normalUserAgentKeywords = new ArrayList();

public LiteDeviceResolver() {

init();

}

public LiteDeviceResolver(List normalUserAgentKeywords) {

init();

this.normalUserAgentKeywords.addAll(normalUserAgentKeywords);

}

public Device resolveDevice(HttpServletRequest request) {

String userAgent = request.getHeader("User-Agent");

// UserAgent keyword detection of Normal devices

if (userAgent != null) {

userAgent = userAgent.toLowerCase();

for (String keyword : normalUserAgentKeywords) {

if (userAgent.contains(keyword)) {

return resolveFallback(request);

}

}

}

// UAProf detection

if (request.getHeader("x-wap-profile") != null || request.getHeader("Profile") != null) {

return LiteDevice.MOBILE_INSTANCE;

}

// User-Agent prefix detection

if (userAgent != null && userAgent.length() >= 4) {

String prefix = userAgent.substring(0, 4).toLowerCase();

if (mobileUserAgentPrefixes.contains(prefix)) {

return LiteDevice.MOBILE_INSTANCE;

}

}

// Accept-header based detection

String accept = request.getHeader("Accept");

if (accept != null && accept.contains("wap")) {

return LiteDevice.MOBILE_INSTANCE;

}

// UserAgent keyword detection for Mobile and Tablet devices

if (userAgent != null) {

userAgent = userAgent.toLowerCase();

// Android special case

if (userAgent.contains("android") && !userAgent.contains("mobile")) {

return LiteDevice.TABLET_INSTANCE;

}

// Kindle Fire special case

if (userAgent.contains("silk") && !userAgent.contains("mobile")) {

return LiteDevice.TABLET_INSTANCE;

}

for (String keyword : tabletUserAgentKeywords) {

if (userAgent.contains(keyword)) {

return LiteDevice.TABLET_INSTANCE;

}

}

for (String keyword : mobileUserAgentKeywords) {

if (userAgent.contains(keyword)) {

return LiteDevice.MOBILE_INSTANCE;

}

}

}

// OperaMini special case

@SuppressWarnings("rawtypes")

Enumeration headers = request.getHeaderNames();

while (headers.hasMoreElements()) {

String header = (String) headers.nextElement();

if (header.contains("OperaMini")) {

return LiteDevice.MOBILE_INSTANCE;

}

}

return resolveFallback(request);

}

// subclassing hooks

/**

* List of user agent prefixes that identify mobile devices.

* Used primarily to match by operator or handset manufacturer.

*/

protected List getMobileUserAgentPrefixes() {

return mobileUserAgentPrefixes;

}

/**

* List of user agent keywords that identify mobile devices.

* Used primarily to match by mobile platform or operating system.

*/

protected List getMobileUserAgentKeywords() {

return mobileUserAgentKeywords;

}

/**

* List of user agent keywords that identify tablet devices.

* Used primarily to match by tablet platform or operating system.

*/

protected List getTabletUserAgentKeywords() {

return tabletUserAgentKeywords;

}

/**

* List of user agent keywords that identify normal devices.

* Any items in this list take precedence over the mobile and

* tablet user agent keywords, effectively overriding those.

*/

protected List getNormalUserAgentKeywords() {

return normalUserAgentKeywords;

}

/**

* Initialize this device resolver implementation.

* Registers the known set of device signature strings.

* Subclasses may override to register additional strings.

*/

protected void init() {

getMobileUserAgentPrefixes().addAll(Arrays.asList(KNOWN_MOBILE_USER_AGENT_PREFIXES));

getMobileUserAgentKeywords().addAll(Arrays.asList(KNOWN_MOBILE_USER_AGENT_KEYWORDS));

getTabletUserAgentKeywords().addAll(Arrays.asList(KNOWN_TABLET_USER_AGENT_KEYWORDS));

}

/**

* Fallback called if no mobile device is matched by this resolver.

* The default implementation of this method returns a "normal" {@link Device} that is neither mobile or a tablet.

* Subclasses may override to try additional mobile or tablet device matching before falling back to a "normal" device.

*/

protected Device resolveFallback(HttpServletRequest request) {

return LiteDevice.NORMAL_INSTANCE;

}

// internal helpers

private static final String[] KNOWN_MOBILE_USER_AGENT_PREFIXES = new String[] { "w3c ", "w3c-", "acs-", "alav",

"alca", "amoi", "audi", "avan", "benq", "bird", "blac", "blaz", "brew", "cell", "cldc", "cmd-", "dang",

"doco", "eric", "hipt", "htc_", "inno", "ipaq", "ipod", "jigs", "kddi", "keji", "leno", "lg-c", "lg-d",

"lg-g", "lge-", "lg/u", "maui", "maxo", "midp", "mits", "mmef", "mobi", "mot-", "moto", "mwbp", "nec-",

"newt", "noki", "palm", "pana", "pant", "phil", "play", "port", "prox", "qwap", "sage", "sams", "sany",

"sch-", "sec-", "send", "seri", "sgh-", "shar", "sie-", "siem", "smal", "smar", "sony", "sph-", "symb",

"t-mo", "teli", "tim-", "tosh", "tsm-", "upg1", "upsi", "vk-v", "voda", "wap-", "wapa", "wapi", "wapp",

"wapr", "webc", "winw", "winw", "xda ", "xda-" };

private static final String[] KNOWN_MOBILE_USER_AGENT_KEYWORDS = new String[] { "blackberry", "webos", "ipod",

"lge vx", "midp", "maemo", "mmp", "mobile", "netfront", "hiptop", "nintendo DS", "novarra", "openweb",

"opera mobi", "opera mini", "palm", "psp", "phone", "smartphone", "symbian", "up.browser", "up.link",

"wap", "windows ce" };

private static final String[] KNOWN_TABLET_USER_AGENT_KEYWORDS = new String[] { "ipad", "playbook", "hp-tablet",

"kindle" };

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值