“Android 강제 업데이트 검사”는 사용자의 앱 버전이 최소 강제 업데이트 버전을 만족하는지 확인하고, 필요한 경우 업데이트를 유도하는 기능이다.
이 작업은 사용자가 로그인하지 않은 상태에서도 수행되어야 하는 작업이기 때문에 JWT 인증 필터에서 차단된다면 이 작업을 수행할 수 없게 된다.
그래서 Spring Security 설정과 JWT 인증 필터를 수정해 해당 경로가 차단되지 않도록 수정했다.
1. 프로젝트 구조
src/main/java/com/example/withpeace/
│
├── config/ # 설정 관련 클래스
│ └── SecurityConfig.java # Spring Security 설정
│
├── constant/
│ └── Constant.java # 상수 정의
│
└── security/
└── JwtAuthenticationFilter.java # JWT 인증 필터
2. Spring Security 설정 파일 구현
SecurityConfig
@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
public class SecurityConfig {
// ... (기존 설정 생략)
@Bean
protected SecurityFilterChain securityFilterChain(final HttpSecurity httpSecurity) throws Exception {
return httpSecurity
// ... (기존 설정 생략)
.authorizeHttpRequests(requestMatcherRegistry -> requestMatcherRegistry
// ... (다른 경로 생략)
.requestMatchers("/api/v1/app/check/android").permitAll()
.anyRequest().authenticated())
// ... (기존 설정 생략)
}
}
.requestMatchers("/api/v1/app/check/android").permitAll()
"/api/v1/app/check/android" 경로에 대한 모든 요청을 사용자의 인증 상태나 역할에 상관없이 허용한다.
3. 상수 정의
Constant
public class Constant {
// ... (다른 상수들)
public static final List<String> NO_NEED_AUTH_URLS = List.of(
// ... (다른 URL들)
"/api/v1/app/check/android", // 강제 업데이트 검사 URL 추가
);
}
Constant 클래스에서 인증이 필요없는 URL 목록을 정의한다.
`NO_NEED_AUTH_URLS` 리스트에 강제 업데이트 검사 URL을 추가했다. 이 경로에 대한 요청은 JWT 인증 필터를 거치지 않는다.
4. JWT 인증 필터 설정
JwtAuthenticationFilter
@AllArgsConstructor
@Slf4j
public class JwtAuthenticationFilter extends OncePerRequestFilter {
private final JwtUtil jwtUtil;
private final JwtAuthenticationProvider jwtAuthenticationProvider;
// ... (기존 코드 생략)
@Override
protected boolean shouldNotFilter(HttpServletRequest request) {
if(!request.getRequestURI().startsWith("/actuator/prometheus")) {
log.info(request.getRequestURI());
log.info(String.valueOf(Constant.NO_NEED_AUTH_URLS.contains(request.getRequestURI())));
}
return Constant.NO_NEED_AUTH_URLS.contains(request.getRequestURI())
|| request.getRequestURI().startsWith("/guest");
}
}
JwtAuthenticationFilter 필터는 JWT 토큰을 검증하고 인증을 처리하는 커스텀 필터이다.
shouldNotFilter 메서드
NO_NEED_AUTH_URLS 에 포함된 URL에 대해 JWT 토큰 검증 과정을 수행하지 않는다.
5. 전체 동작 과정
- 요청이 들어오면 Spring Security 의 기본 필터 체인을 거친다.
- SecurityConfig의 `requestMatchers().permitAll()` 설정으로 인해 해당 URL은 인증 없이 통과된다.
- 요청이 JwtAuthenticationFilter에 도달하면 `shouldNotFilter` 메서드에 의해 이 필터도 적용되지 않는다.
`requestMatchers().permitAll()` 설정이 좀 더 광범위한 설정이고, Spring Security의 모든 보안 검사를 패스하게 된다. (전체 보안 컨텍스트에서 작동)
`NO_NEED_AUTH_URLS`와 `shouldNotFilter` 메서드는 JWT 인증에서만 패스한다.
반응형
'Projects > 청하-청년을 위한 커뮤니티 서비스' 카테고리의 다른 글
[청하] 24. 청년 정책 Open API 연동 및 데이터베이스 저장 (feat. XML 데이터 매핑, 스케줄러 적용) (5) | 2024.10.17 |
---|---|
[청하] 23. 게시글 삭제 기능 - 외래키 제약 조건 수정 (2) | 2024.10.16 |
[청하] 21. Android 강제 업데이트 버전 설정 기능 구현 (0) | 2024.10.16 |
[청하] 20. Android 강제 업데이트 검사 기능 구현 (0) | 2024.10.15 |
[청하] 19. 인앱 업데이트 테크 스팩 작성 (2) | 2024.10.15 |
댓글