0

스프링 부트로 웹 응용 프로그램을 구축 중입니다. 게시물 요청은 XML 형식으로 데이터를 클라우드에 업로드 할 수 있도록 전화 앱에서 요청할 수 있습니다. 데이터를 푸시 할 수있는 전화는 회사 전화 번호로 등록해야합니다. API 호출을 인증하는 방법은 기업 데이터베이스에서 휴대 전화의 Android ID를 조회하는 것입니다. Android ID가있는 경우에만 데이터를 수락합니다. 아이디어는 요청 헤더에 안드로이드 ID를 삽입하는 것입니다. 이것은 일반적인 인증 방법이 아니기 때문에 Spring Security로 구현하는 방법은 무엇입니까? 아니면 스프링 보안이 필요하지 않습니다. 헤더에서 Android ID를 추출하고 데이터베이스에서 찾아보십시오. 유효한 ID가 아닌 경우 요청을 거부하십시오. 어떤 조언이 도움이 될 것입니다.스프링 부트 응용 프로그램에서 사용자 정의 된 인증을 구현하는 방법

답변

0

인증 헤더를 창의적인 방법으로 사용하지 못하도록하는 것은 아닙니다. 즉, Android 헤더를 Android 헤더에 삽입하는 것만 큼 아무 것도 없습니다. 그런 다음, 엔드 포인트에 인증을 추가하려면, 당신은 AOP 인터셉터를 사용할 수 있습니다

보호 작업 마커 인터페이스 :

@Target({ElementType.METHOD}) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface ProtectedOperation { 
} 

인터셉터 :

@Aspect 
@Component 
public class SecurityAspect { 
    private CorporateService corpService; // this is your custom service to check Android IDs 
    @Autowired 
    public SecurityAspect(CorporateService corpService) { 
     this.corpService = corpService; 
    } 
    @Around("@annotation(operation)") 
    public Object protectedOperationPermissionCheck(final ProceedingJoinPoint pjp, final ProtectedOperation operation) throws Throwable { 
     ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes(); 
     String header = requestAttributes.getRequest().getHeader("Authorization"); 
     String androidId = // get the ID from header - try not to use existing authorization header formats like Bearer, Negotiate etc. to avoid collision with other authentication systems 
     if (corpService.isAuthorized(androidId)) { 
      return pjp.proceed(); 
     } 
     response.setStatus(HttpServletResponse.SC_FORBIDDEN); 
     response.flushBuffer(); 
     return null; 
    } 
} 

하면 spring-boot-starter-aop 종속성을 추가해야합니다 귀하의 pom.xml에 @Aspect 지원

EDIT : 귀하의 c에서 끝점 방법에 주석을 달려면 스프링 부트 애플리케이션에 @EnableAspectJAutoProxy을 추가하십시오.

관련 문제