SpringBoot 는 어떻게 사용자 정의 주 해 를 통 해 권한 검 사 를 실현 하 는 지 상세 하 게 설명 합 니 다.
6988 단어 springboot사용자 정의 주석권한
최근 에 인 터 페 이 스 를 개 발 했 는데 완 성 된 후에 자체 측정 을 준비 할 때 차단기 에 의 해 차단 되 었 습 니 다.힌트:
(AUTH-NO) !
어떻게 이 럴 수 있 습 니까?그래서 저 는 이 제시 어 를 전체적으로 검색 한 결과 Aspect 류 에 나타 나 고@interface 를 접점 으로 했 습 니 다.여기 서 Spring AOP 를 절단면 으로 하 는 방식 으로 권한 통 제 를 했 습 니 다.
SpringBoot 는 사용자 정의 주 해 를 통 해 로그 인쇄 를 할 수 있 습 니 다.SpringBoot 는 사용자 정의 주 해 를 통 해 로그 인쇄 를 실현 합 니 다.
본문
Spring AOP
Spring AOP 는 절단면 을 향 한 것 으로 OOP 대상 을 향 한 연장 이다.
AOP 메커니즘 은 개발 자가 업무 프로 세 스에 서 통용 되 는 기능 을 추출 하여 기능 코드 를 단독으로 작성 하도록 할 수 있다.업무 프로 세 스 를 실행 하 는 과정 에서 Spring 프레임 워 크 는 업무 프로 세 스 의 요구 에 따라 독립 적 으로 작 성 된 기능 코드 를 프로 세 스 의 적당 한 위치 에 자동 으로 삽입 합 니 다.
저 희 는 AOP 체 제 를 통 해 Authentication 권한 검사,Caching 캐 시,Context passing 내용 전달,Error handling 오류 처리,로그 인쇄 등 기능 을 실현 할 수 있 습 니 다.여기 서 Spring AOP 로 권한 검 사 를 어떻게 하 는 지 말씀 드 리 겠 습 니 다.
SpringBoot 는 사용자 정의 주 해 를 통 해 권한 검 사 를 실현 합 니 다.
Maven 의존
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.2</version>
<optional>true</optional>
</dependency>
<!--Spring AOP-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
MyPermission Tag.class 사용자 정의 주석
/**
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyPermissionTag {
String value() default "";
String name() default "";
}
여기 서 특별히@Retention 에 대해 말씀 드 리 겠 습 니 다.생명주기 에 따라 3 가지 로 나 눌 수 있 습 니 다.AuthorInterceptor 권한 검사 의 절단면
단면 적 인 집행 방법 과 그 집행 순 서 를 간단하게 소개 합 니 다.
AuthInterceptor.class
시작 클래스 에서 이 class 를 스 캔 하고 추가 하 는 것 을 주의 하 십시오
@EnableAspectJAutoProxy(proxyTargetClass = true)
@Slf4j
@Aspect
@Component
public class AuthInterceptor {
/**
*
*
* @param point
*/
@Before("@annotation(com.luo.common.tag.MyPermissionTag)")
public void beforeProReq(JoinPoint point) {
log.info(" - ");
Request req = getOperationRequest(point.getArgs());
if (req != null) {
//
log.info(" - ACCOUNT:{}", req.getAccount());
log.info(" - ACCOUNT:{}", req.getAccount());
}
log.info(" - ");
}
@Around("@annotation(com.luo.common.tag.MyPermissionTag)")
public Object authCheck(ProceedingJoinPoint pjp) throws Throwable {
log.info(" - ");
//
ReqMethod reqMethod = getPermissionTag(pjp);
MyPermissionTag myPermissionTag =reqMethod.perTag;
log.info(myPermissionTag.value()); //
log.info(" - - :{}", reqMethod.getMethodName());
if("true".equals(myPermissionTag.value().toString())){
//
Response notGoRes = new Response();
Request req = getOperationRequest(pjp.getArgs());
//
if (req == null) {
notGoRes.setErrorMsg("(AUTH) !");
log.info("(AUTH-NO) !");
return notGoRes;
}else {//
log.info(" :"+req);
}
}else {
log.info(" ");
}
return pjp.proceed();
}
/**
* request
* @param args
* @return
*/
private Request getOperationRequest(Object[] args) {
if (args == null || args.length <= 0) {
log.error("AUTH : !");
return null;
}
Object obj = args[0];
if (obj instanceof Request) {
log.info("AUTH : OperationRequest ");
return (Request) obj;
}
return null;
}
/**
*
* + ( key+value )
* @param pjp
* @return
* @throws SecurityException
* @throws NoSuchMethodException
*/
private ReqMethod getPermissionTag(ProceedingJoinPoint pjp) throws NoSuchMethodException, SecurityException {
Signature signature = pjp.getSignature();
MethodSignature methodSignature = (MethodSignature) signature;
Method targetMethod = methodSignature.getMethod();
Method realMethod = pjp.getTarget().getClass().getDeclaredMethod(signature.getName(), targetMethod.getParameterTypes());
MyPermissionTag permissionTag = realMethod.getAnnotation(MyPermissionTag.class);
return new ReqMethod(permissionTag, realMethod.getName());
}
@Setter
@Getter
class ReqMethod {
private MyPermissionTag perTag;
private String methodName;
public ReqMethod(MyPermissionTag perTag, String methodName) {
this.perTag = perTag;
this.methodName = methodName;
}
}
}
검증 하 다.테스트 인터페이스
@PostMapping("/helloluo")
@MyPermissionTag(value = "true")
public String helloluo(UserPojoReq userPojoReq){
return "Hello World";
}
송신 요청검증 하 다.
총결산
SpringBoot 가 어떻게 사용자 정의 주 해 를 통 해 권한 검 사 를 실현 하 는 지 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 SpringBoot 사용자 정의 주 해 를 통 해 권한 검사 내용 을 확인 할 수 있 습 니 다.이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 지원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin Springboot -- 파트 14 사용 사례 REST로 전환하여 POST로 JSON으로 전환前回 前回 前回 記事 の は は で で で で で で を 使っ 使っ 使っ て て て て て リクエスト を を 受け取り 、 reqeustbody で 、 その リクエスト の ボディ ボディ を を 受け取り 、 関数 内部 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.