面向切面编程
面向切面编程之登录日志
AOP的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
获取当前所在城市的依赖:
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>geolite2-databases</artifactId>
<version>20151029</version>
</dependency>
切面类的代码:
@Component
@Aspect //切面
public class LogininfoAop {
@Autowired
private LogininfoFeign logininfoFeign;
// @Before() 前置通知。
// @After() 后置通知 finally
// @AfterReturning 返回通知。 没有异常。
// @AfterThrowing 异常通知 catch
@AfterReturning(value = "execution(* com.car.sso.service.impl.*.*(..))")
public void loginAfter(JoinPoint joinPoint){
//添加登陆成功的日志。
Logininfo logininfo=new Logininfo();
//设置登陆的用户名
LoginVo loginVo= (LoginVo) joinPoint.getArgs()[0];
logininfo.setLoginName(loginVo.getUsername());
//设置登陆者的ip
//获取请求对象
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
logininfo.setIpaddr(request.getRemoteAddr());
//设置登陆者所在的城市
logininfo.setLoginLocation(IPUtils.getCity(request.getRemoteAddr()));
Map<String, String> osAndBrowserInfo = getOsAndBrowserInfo(request);
logininfo.setOs(osAndBrowserInfo.get("os"));
logininfo.setBrowser(osAndBrowserInfo.get("browser"));
logininfo.setStatus("0");
logininfo.setMsg("登陆成功");
logininfo.setLoginTime(new Date());
logininfoFeign.insertLogininfo(logininfo);
}
/**
* 获取操作系统,浏览器及浏览器版本信息
* @param request
* @return
*/
public Map<String,String> getOsAndBrowserInfo(HttpServletRequest request){
String browserDetails = request.getHeader("User-Agent");
String userAgent = browserDetails;
String user = userAgent.toLowerCase();
String os = "";
String browser = "";
//=================OS Info=======================
if (userAgent.toLowerCase().indexOf("windows") >= 0 )
{
os = "Windows";
} else if(userAgent.toLowerCase().indexOf("mac") >= 0)
{
os = "Mac";
} else if(userAgent.toLowerCase().indexOf("x11") >= 0)
{
os = "Unix";
} else if(userAgent.toLowerCase().indexOf("android") >= 0)
{
os = "Android";
} else if(userAgent.toLowerCase().indexOf("iphone") >= 0)
{
os = "IPhone";
}else{
os = "UnKnown, More-Info: "+userAgent;
}
//===============Browser===========================
if (user.contains("edge"))
{
browser=(userAgent.substring(userAgent.indexOf("Edge")).split(" ")[0]).replace("/", "-");
} else if (user.contains("msie"))
{
String substring=userAgent.substring(userAgent.indexOf("MSIE")).split(";")[0];
browser=substring.split(" ")[0].replace("MSIE", "IE")+"-"+substring.split(" ")[1];
} else if (user.contains("safari") && user.contains("version"))
{
browser=(userAgent.substring(userAgent.indexOf("Safari")).split(" ")[0]).split("/")[0]
+ "-" +(userAgent.substring(userAgent.indexOf("Version")).split(" ")[0]).split("/")[1];
} else if ( user.contains("opr") || user.contains("opera"))
{
if(user.contains("opera")){
browser=(userAgent.substring(userAgent.indexOf("Opera")).split(" ")[0]).split("/")[0]
+"-"+(userAgent.substring(userAgent.indexOf("Version")).split(" ")[0]).split("/")[1];
}else if(user.contains("opr")){
browser=((userAgent.substring(userAgent.indexOf("OPR")).split(" ")[0]).replace("/", "-"))
.replace("OPR", "Opera");
}
} else if (user.contains("chrome"))
{
browser=(userAgent.substring(userAgent.indexOf("Chrome")).split(" ")[0]).replace("/", "-");
} else if ((user.indexOf("mozilla/7.0") > -1) || (user.indexOf("netscape6") != -1) ||
(user.indexOf("mozilla/4.7") != -1) || (user.indexOf("mozilla/4.78") != -1) ||
(user.indexOf("mozilla/4.08") != -1) || (user.indexOf("mozilla/3") != -1) )
{
browser = "Netscape-?";
} else if (user.contains("firefox"))
{
browser=(userAgent.substring(userAgent.indexOf("Firefox")).split(" ")[0]).replace("/", "-");
} else if(user.contains("rv"))
{
String IEVersion = (userAgent.substring(userAgent.indexOf("rv")).split(" ")[0]).replace("rv:", "-");
browser="IE" + IEVersion.substring(0,IEVersion.length() - 1);
} else
{
browser = "UnKnown, More-Info: "+userAgent;
}
Map<String,String> map=new HashMap<>();
map.put("os",os);
map.put("browser",browser);
return map;
}
}
(待完善…)
(此文档仅作为个人编程记录……)
还没有评论,来说两句吧...