面向切面编程

怼烎@ 2023-10-04 13:57 37阅读 0赞

面向切面编程之登录日志

AOP的依赖:

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-aop</artifactId>
  4. </dependency>

获取当前所在城市的依赖:

  1. <dependency>
  2. <groupId>org.elasticsearch</groupId>
  3. <artifactId>geolite2-databases</artifactId>
  4. <version>20151029</version>
  5. </dependency>

切面类的代码:

  1. @Component
  2. @Aspect //切面
  3. public class LogininfoAop {
  4. @Autowired
  5. private LogininfoFeign logininfoFeign;
  6. // @Before() 前置通知。
  7. // @After() 后置通知 finally
  8. // @AfterReturning 返回通知。 没有异常。
  9. // @AfterThrowing 异常通知 catch
  10. @AfterReturning(value = "execution(* com.car.sso.service.impl.*.*(..))")
  11. public void loginAfter(JoinPoint joinPoint){
  12. //添加登陆成功的日志。
  13. Logininfo logininfo=new Logininfo();
  14. //设置登陆的用户名
  15. LoginVo loginVo= (LoginVo) joinPoint.getArgs()[0];
  16. logininfo.setLoginName(loginVo.getUsername());
  17. //设置登陆者的ip
  18. //获取请求对象
  19. HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
  20. logininfo.setIpaddr(request.getRemoteAddr());
  21. //设置登陆者所在的城市
  22. logininfo.setLoginLocation(IPUtils.getCity(request.getRemoteAddr()));
  23. Map<String, String> osAndBrowserInfo = getOsAndBrowserInfo(request);
  24. logininfo.setOs(osAndBrowserInfo.get("os"));
  25. logininfo.setBrowser(osAndBrowserInfo.get("browser"));
  26. logininfo.setStatus("0");
  27. logininfo.setMsg("登陆成功");
  28. logininfo.setLoginTime(new Date());
  29. logininfoFeign.insertLogininfo(logininfo);
  30. }
  31. /**
  32. * 获取操作系统,浏览器及浏览器版本信息
  33. * @param request
  34. * @return
  35. */
  36. public Map<String,String> getOsAndBrowserInfo(HttpServletRequest request){
  37. String browserDetails = request.getHeader("User-Agent");
  38. String userAgent = browserDetails;
  39. String user = userAgent.toLowerCase();
  40. String os = "";
  41. String browser = "";
  42. //=================OS Info=======================
  43. if (userAgent.toLowerCase().indexOf("windows") >= 0 )
  44. {
  45. os = "Windows";
  46. } else if(userAgent.toLowerCase().indexOf("mac") >= 0)
  47. {
  48. os = "Mac";
  49. } else if(userAgent.toLowerCase().indexOf("x11") >= 0)
  50. {
  51. os = "Unix";
  52. } else if(userAgent.toLowerCase().indexOf("android") >= 0)
  53. {
  54. os = "Android";
  55. } else if(userAgent.toLowerCase().indexOf("iphone") >= 0)
  56. {
  57. os = "IPhone";
  58. }else{
  59. os = "UnKnown, More-Info: "+userAgent;
  60. }
  61. //===============Browser===========================
  62. if (user.contains("edge"))
  63. {
  64. browser=(userAgent.substring(userAgent.indexOf("Edge")).split(" ")[0]).replace("/", "-");
  65. } else if (user.contains("msie"))
  66. {
  67. String substring=userAgent.substring(userAgent.indexOf("MSIE")).split(";")[0];
  68. browser=substring.split(" ")[0].replace("MSIE", "IE")+"-"+substring.split(" ")[1];
  69. } else if (user.contains("safari") && user.contains("version"))
  70. {
  71. browser=(userAgent.substring(userAgent.indexOf("Safari")).split(" ")[0]).split("/")[0]
  72. + "-" +(userAgent.substring(userAgent.indexOf("Version")).split(" ")[0]).split("/")[1];
  73. } else if ( user.contains("opr") || user.contains("opera"))
  74. {
  75. if(user.contains("opera")){
  76. browser=(userAgent.substring(userAgent.indexOf("Opera")).split(" ")[0]).split("/")[0]
  77. +"-"+(userAgent.substring(userAgent.indexOf("Version")).split(" ")[0]).split("/")[1];
  78. }else if(user.contains("opr")){
  79. browser=((userAgent.substring(userAgent.indexOf("OPR")).split(" ")[0]).replace("/", "-"))
  80. .replace("OPR", "Opera");
  81. }
  82. } else if (user.contains("chrome"))
  83. {
  84. browser=(userAgent.substring(userAgent.indexOf("Chrome")).split(" ")[0]).replace("/", "-");
  85. } else if ((user.indexOf("mozilla/7.0") > -1) || (user.indexOf("netscape6") != -1) ||
  86. (user.indexOf("mozilla/4.7") != -1) || (user.indexOf("mozilla/4.78") != -1) ||
  87. (user.indexOf("mozilla/4.08") != -1) || (user.indexOf("mozilla/3") != -1) )
  88. {
  89. browser = "Netscape-?";
  90. } else if (user.contains("firefox"))
  91. {
  92. browser=(userAgent.substring(userAgent.indexOf("Firefox")).split(" ")[0]).replace("/", "-");
  93. } else if(user.contains("rv"))
  94. {
  95. String IEVersion = (userAgent.substring(userAgent.indexOf("rv")).split(" ")[0]).replace("rv:", "-");
  96. browser="IE" + IEVersion.substring(0,IEVersion.length() - 1);
  97. } else
  98. {
  99. browser = "UnKnown, More-Info: "+userAgent;
  100. }
  101. Map<String,String> map=new HashMap<>();
  102. map.put("os",os);
  103. map.put("browser",browser);
  104. return map;
  105. }
  106. }

(待完善…)

(此文档仅作为个人编程记录……)

发表评论

表情:
评论列表 (有 0 条评论,37人围观)

还没有评论,来说两句吧...

相关阅读

    相关 AOP面向切面编程

    [1.引言][1.]         原文地址:[点击打开链接][1.] 软件开发的目标是要对世界的部分元素或者信息流建立模型,实现软件系统的工程需要将系统分解成可以创

    相关 AOP面向切面编程

    AOP 面向切面编程 1.使用场景还原 当我们打开京东 app 进入首页,如果当前是没有网络的状态,里面的按钮点击是没有反应的。只有当我们打开网络的情况下,点击按钮