網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
使用Spring AOP做登錄日志切面(Login Log Aspect)
-
創(chuàng)建一個(gè)登錄日志切面(Login Log Aspect),包含以下內(nèi)容:
@Aspect @Component public class LoginLogAspect { @Before("execution(* com.example.demo.controller.UserController.login(..))") public void beforeLogin(JoinPoint joinPoint) { String userName = (String) joinPoint.getArgs()[0]; String password = (String) joinPoint.getArgs()[1]; System.out.println("用戶(hù)[" + userName + "]開(kāi)始登錄..."); } @AfterReturning(pointcut = "execution(* com.example.demo.controller.UserController.login(..))", returning = "result") public void afterLogin(Object result) { System.out.println("用戶(hù)登錄成功!"); } @AfterThrowing(pointcut = "execution(* com.example.demo.controller.UserController.login(..))", throwing = "ex") public void afterLoginException(Exception ex) { System.out.println("用戶(hù)登錄失敗:" + ex.getMessage()); } }
-
在Spring的配置文件中啟用AOP自動(dòng)代理,配置如下:
<aop:aspectj-autoproxy />
-
創(chuàng)建一個(gè)登錄控制器(LoginController),包含以下內(nèi)容:
@RestController @RequestMapping("/login") public class UserController { @Autowired private UserService userService; @PostMapping public String login(@RequestParam String userName, @RequestParam String password) { User user = userService.getUserByUserNameAndPassword(userName, password); if (user != null) { return "loginSuccess"; } else { throw new RuntimeException("用戶(hù)名或密碼錯(cuò)誤!"); } } }
-
創(chuàng)建一個(gè)用戶(hù)服務(wù)類(lèi)(UserService),包含以下內(nèi)容:
@Service public class UserService { // 省略其他方法,僅提供一個(gè)根據(jù)用戶(hù)名和密碼獲取用戶(hù)信息的方法。 public User getUserByUserNameAndPassword(String userName, String password) { // 根據(jù)用戶(hù)名和密碼查詢(xún)用戶(hù)信息,此處僅作示例,實(shí)際情況下需要根據(jù)數(shù)據(jù)庫(kù)等存儲(chǔ)介質(zhì)查詢(xún)。 return null; } }
通過(guò)以上步驟,就可以實(shí)現(xiàn)使用Spring AOP編寫(xiě)登錄日志的功能。在用戶(hù)登錄時(shí),會(huì)自動(dòng)輸出登錄日志信息。
原文鏈接:https://blog.csdn.net/My_wife_QBL/article/details/132626215
- 上一篇:沒(méi)有了
- 下一篇:沒(méi)有了
相關(guān)推薦
- 2022-10-02 react中的useImperativeHandle()和forwardRef()用法_React
- 2022-08-18 YOLOv5改進(jìn)教程之添加注意力機(jī)制_python
- 2023-11-16 當(dāng)pytorch找不到 CUDA 時(shí),如何修復(fù)錯(cuò)誤:版本 libcublasLt.so.11 未在帶
- 2023-01-21 Go語(yǔ)言O(shè)RM框架構(gòu)造查詢(xún)條件示例詳解_Golang
- 2022-04-08 pytorch?plt.savefig()的用法及保存路徑_python
- 2022-04-20 Django學(xué)習(xí)之路之請(qǐng)求與響應(yīng)_python
- 2022-09-16 Pandas數(shù)據(jù)形狀df.shape的實(shí)現(xiàn)_python
- 2022-02-25 Oracle函數(shù)使索引列失效的解決辦法_oracle
- 欄目分類(lèi)
-
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支