- 因为要做登入日志的记录,需要记录用户的设备信息、比如ip、操作系统
需要使用工具使用jar包
<!-- UA解析工具 -->
<dependency>
<groupId>eu.bitwalker</groupId>
<artifactId>UserAgentUtils</artifactId>
<version>1.21</version>
</dependency>
<!-- UA解析工具 -->
通过浏览器带的hand来获取(User-Agent)获取操作系统
/**
* 获取操作系统名称
*
* @return
*/
public String getOpenSystem(HttpServletRequest request) {
String userAgent = request.getHeader("User-Agent");
String openSystem=getDevice(userAgent);
return openSystem;
}
/**
* 解析 用户代理(User-Agent)
* @param userAgent 用户代理User-Agent ,UA
* @return "操作系统:%s
* @author ghl
*/
private static String getDevice(String userAgent) {
//解析agent字符串
UserAgent ua = UserAgent.parseUserAgentString(userAgent);
//获取操作系统对象
OperatingSystem os = ua.getOperatingSystem();
return String.format("%s",os.getName());
}
获取ip地址
/**
* 获取ip地址
*
* @param request
* @return
*/
private String getIpAddr(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
通过ip地址获取登入的地址
private String getAddress(String jsonAddr) {
JSONObject jsonObject = JSON.parseObject(jsonAddr);
JSONObject date = jsonObject.getJSONObject("data");
String region = date.getString("region");
if ("XX".equals(region)) {
return date.getString("city");
}
return region;
}
/**
* 获取到json得地址数据
*
* @param ip
* @return
*/
private String getJsonAddress(String ip) {
StringBuffer result = null;
try {
// String strIP = "36.27.47.234";
URL url = new URL("http://ip.taobao.com/outGetIpInfo?ip=" + ip + "&accessKey=alibaba-inc");
URLConnection conn = url.openConnection();
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
String line = null;
result = new StringBuffer();
while ((line = reader.readLine()) != null) {
result.append(line);
}
reader.close();
} catch (IOException e) {
System.out.println(e.getMessage());
return "读取失败";
}
return result.toString();
}