我是靠谱客的博主 热情河马,这篇文章主要介绍SpringSecurity的OAuth2.0的登录日志的处理(使用AOP),现在分享给大家,希望可以做个参考。

原理:

用AOP的方式将

复制代码
1
@RequestMapping(value = "/oauth/token", method=RequestMethod.POST)

org.springframework.security.oauth2.provider.endpoint.TokenEndpoint.postAccessToken

用到的maven(获取请求useragent的信息的包):

复制代码
1
2
3
4
5
6
<!--获取请求主机的useragent的信息的包--> <dependency> <groupId>eu.bitwalker</groupId> <artifactId>UserAgentUtils</artifactId> <version>1.21</version> </dependency>

LoginHttpRequestAop : 

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package application.aop; import eu.bitwalker.useragentutils.BrowserType; import eu.bitwalker.useragentutils.DeviceType; import eu.bitwalker.useragentutils.OperatingSystem; import eu.bitwalker.useragentutils.UserAgent; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.*; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.text.SimpleDateFormat; import java.util.Objects; import java.util.TimeZone; /** * @author: wtl * @License: (C) Copyright 2021, wtl Corporation Limited. * @Contact: 1050100468@qq.com * @Date: 2021/8/1 7:08 * @Version: 1.0 * @Description: */ @Component @Aspect public class LoginHttpRequestAop { @Pointcut("execution(* org.springframework.security.oauth2.provider.endpoint.TokenEndpoint.postAccessToken(..))") public void pointCut(){ } @After("pointCut()") public void loginAop(JoinPoint joinPoint){ SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); simpleDateFormat.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); HttpServletRequest httpServletRequest = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest(); HttpServletResponse httpServletResponse = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse(); String userAgentString = httpServletRequest.getHeader("User-Agent"); UserAgent userAgent = UserAgent.parseUserAgentString(userAgentString); BrowserType browserType = userAgent.getBrowser().getBrowserType(); //浏览器类型 OperatingSystem operatingSystem = userAgent.getOperatingSystem(); // 操作系统信息 DeviceType deviceType = operatingSystem.getDeviceType(); // 设备类 String role = httpServletRequest.getRemoteUser(); String remoteRequestIp = getRemoteRequestIp(httpServletRequest); System.out.println(httpServletResponse.getStatus()); System.out.println(remoteRequestIp); System.out.println(browserType); System.out.println(operatingSystem); System.out.println(deviceType); System.out.println(role); System.out.println(simpleDateFormat.format(System.currentTimeMillis())); } @AfterThrowing(value = "pointCut()",throwing = "throwable") public void loginAfterThrowingAop(JoinPoint joinPoint,Throwable throwable){ System.out.println(throwable); } //获取请求IP private String getRemoteRequestIp(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; } }

最后

以上就是热情河马最近收集整理的关于SpringSecurity的OAuth2.0的登录日志的处理(使用AOP)的全部内容,更多相关SpringSecurity内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部