SpringCloud+Nacos等集成的微服务项目开发——AOP 自定义注解实现操作日志统一管理

记录

  在通过AOP+自定义注解实现操作日志统一管理功能时,为了减少代码冗余,将AOP代码和注解代码放在公共模块,再使用pom依赖方式将其注入到需要使用的微服务模块。

在此期间遇到以下问题

问题一

  公共模块打包时,一直抛出 unable to find main class错误,经查明是因为使用的SpringBoot生成的项目,其所使用的Maven插件会默认寻找签名是public static void main(String[] args)的方法,没有则会报错

 所采用的解决方案是选用Apache的Maven插件

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
</plugin>

问题二

  在注入依赖后,项目启动并进行测试时发现AOP并没有生效,经查阅资料确定,注入的微服务模块中,其启动类并没有扫描到公共模块中的自定义注解类所在路径。

  公共模块所在的包是“com.demo.common”,所使用的微服务模块所在的包是“com.demo.user10010”,因此导致common包没有被扫描进ioc容器。

解决方法是:通过在所注入依赖的微服务模块启动类添加 scanBasePackages = "com.demo"

@SpringBootApplication(scanBasePackages = "com.demo")

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用拦截器(Interceptor)来实现微服务AOP,记录登录设备ID、登录IP和登录地址。在拦截器中,可以通过HttpServletRequest对象获取登录设备ID、登录IP和登录地址等信息,然后将这些信息记录到日志中或者存储到数据库中。 以下是一个示例代码: ```java public class LoginInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 获取登录设备ID String deviceId = request.getHeader("deviceId"); // 获取登录IP String ip = request.getRemoteAddr(); // 获取登录地址 String address = getAddressByIp(ip); // 记录登录信息 log.info("用户登录,设备ID:{},IP:{},地址:{}", deviceId, ip, address); return true; } private String getAddressByIp(String ip) { // 根据IP地址获取地理位置信息 // TODO:实现获取地理位置信息的逻辑 return ""; } } ``` 在使用时,需要将LoginInterceptor注册到微服务的拦截器链中。例如,在Spring Boot中可以通过@Configuration注解和WebMvcConfigurer接口来实现: ```java @Configuration public class WebConfig implements WebMvcConfigurer { @Autowired private LoginInterceptor loginInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(loginInterceptor).addPathPatterns("/**"); } } ``` 这样,当有请求进入微服务时,LoginInterceptor会被拦截器链调用,从而实现记录登录设备ID、登录IP和登录地址的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值