요구사항: 프로젝트는 매개변수가 컨트롤러 메서드에 들어가기 전에 요청 매개변수를 동적으로 수정하고, 현재 사용자의 권한에 따라 요청을 매개변수에 값을 할당해야 하며, 요청 매개변수 수정이 완료되어야 하며, 컨트롤러가 서비스 계층을 호출할 때 요청 매개변수를 조건으로 사용하여 데이터를 쿼리하고 수정할 수 있습니다. 매개변수를 요청하는 경우는 두 가지가 있습니다:
- 권한이 높은 사용자의 경우, 실제로 요청된 매개변수 값을 사용할 수 있습니다
- 부분적인 권한만 가진 사람들의 경우, 요청 매개변수 값은 현재 사용자에게 묶인 정보에 따라 동적으로 수정됩니다
처음에는 필터를 통해 구현하려고 했지만, 요청 내용을 직렬화하고 역직렬화하는 것이 너무 번거로웠고, 논리적 판단과 성능 저하도 많이 필요했습니다. 다행히도 Spring은 간단한 코드로 구현할 수 있는 AOP 얼굴 지향 기능을 제공합니다.
우선, maven 프로젝트 pom.xml spring-boot-starter-aop 패키지를 다음과 같이 도입해야 합니다:
패키지가 도입되면 AOP 기능을 사용할 수 있습니다.@Aspect주석.
Aspect 는 5가지 유형의 알림 주석을 지원합니다:
@Before: 사전 알림은 메서드가 실행되기 전에 실행됩니다
@After: 포스트알림, 메서드가 실행된 후 실행됩니다
@AfterRunning: 메서드가 결과를 반환한 후 실행되는 알림을 반환합니다
@AfterThrowing: 예외 알림, 메서드가 예외를 던진 후
@Around: 메서드 실행 주위의 랩어라운드 알림
Request.java 일반적인 요청 래퍼 클래스를 생성하세요:
새로운 UserInfo.java 요청 특정 데이터 클래스를 생성하세요:
현재 요청 헤더에 appid가 있으면 request(appId) 값이 수정되고, 그렇지 않으면 request 매개변수는 변경되지 않습니다. 코드는 다음과 같습니다:
새로운 HomeController 컨트롤러를 만들고 Request가 포함된 요청 매개변수가 포함된 인터페이스를 추가<UserInfo>하면, 코드는 다음과 같습니다:
appId 요청 헤더가 없는 테스트의 경우, 요청 매개변수 appId가 실제 값이며 수정되지 않은 상태입니다. 다음 그림에서 확인할 수 있습니다:
appId 요청 헤더를 추가하려고 시도하면, 다음 그림에서 보듯이 appId 요청 매개변수가 성공적으로 수정된 것을 볼 수 있습니다:
마지막으로 소스 코드를 첨부하세요:하이퍼링크 로그인이 보입니다.
|