springboot學習(十一)UserAgentUtils


user-agent-utils 是一個用來解析 User-Agent 字符串的 Java 類庫。 其能夠識別的內容包括: 超過150種不同的瀏覽器; 7種不同的瀏覽器類型; 超過60種不同的操作系統; 6種不同的設備類型; 9種不同的渲染引擎; 9種不同的Web應用,如HttpClient、Bot。

在web應用中我們通過request獲取用戶的Agent:

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

如下,我們獲取了一個agent的字符串:

"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36"

由此,通過User-agent-utils解析:

String agent=request.getHeader("User-Agent");
//解析agent字符串
UserAgent userAgent = UserAgent.parseUserAgentString(agent);
//獲取瀏覽器對象
Browser browser = userAgent.getBrowser();
//獲取操作系統對象
OperatingSystem operatingSystem = userAgent.getOperatingSystem();

System.out.println("瀏覽器名:"+browser.getName());
System.out.println("瀏覽器類型:"+browser.getBrowserType());
System.out.println("瀏覽器家族:"+browser.getGroup());
System.out.println("瀏覽器生產廠商:"+browser.getManufacturer());
System.out.println("瀏覽器使用的渲染引擎:"+browser.getRenderingEngine());
System.out.println("瀏覽器版本:"+userAgent.getBrowserVersion());
       
System.out.println("操作系統名:"+operatingSystem.getName());
System.out.println("訪問設備類型:"+operatingSystem.getDeviceType());
System.out.println("操作系統家族:"+operatingSystem.getGroup());
System.out.println("操作系統生產廠商:"+operatingSystem.getManufacturer());

AOP && UserAgent

使用日志AOP獲取請求方法,參數,瀏覽器信息等

@Aspect
@Component
@Slf4j
public class AopLog {
   private static final String START_TIME = "request-start";

   @Pointcut("execution(* com.hjy.log.aop.controller.*.*(..) )")
   public void log(){}

   @Before("log()")
   public void beforeLog(JoinPoint point){
       ServletRequestAttributes attributes= (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
       HttpServletRequest request= Objects.requireNonNull(attributes).getRequest();

       log.info("【請求 URL】: {}",request.getRequestURL());
       log.info("【請求 IP】: {}",request.getRemoteAddr());
       log.info("【請求類名】: {},【請求方法名】: {}",
               point.getSignature().getDeclaringTypeName(),
               point.getSignature().getName());

       Map<String,String[]> map= request.getParameterMap();
       log.info("【請求參數】: {}", JSONUtil.toJsonStr(map));
       Long start=System.currentTimeMillis();
       request.setAttribute(START_TIME,start);

  }

   @Around("log()")
   public Object aroundLog(ProceedingJoinPoint point) throws Throwable {
       Object result=point.proceed();
       log.info("【返回值】:{}",JSONUtil.toJsonStr(result));
       return result;
  }

   @After("log()")
   public void afterLog(){
       ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
       HttpServletRequest request = Objects.requireNonNull(attributes).getRequest();
       Long start= (Long) request.getAttribute(START_TIME);
       Long end=System.currentTimeMillis();
       log.info("【請求耗時】:{}ms",end-start);

       String header=request.getHeader("User-Agent");
       UserAgent userAgent=UserAgent.parseUserAgentString(header);
       log.info("【瀏覽器類型】:{},【操作系統】:{},【原始User-Agent】:{}",
               userAgent.getBrowser().toString(),
               userAgent.getOperatingSystem().toString(),
               header);
  }
}

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM