diff --git a/build.gradle b/build.gradle index 0aa95fd..f530fd3 100644 --- a/build.gradle +++ b/build.gradle @@ -107,6 +107,9 @@ dependencies { // health-check implementation 'org.springframework.boot:spring-boot-starter-actuator' + + //redirect + implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' } tasks.named('test') { diff --git a/src/main/java/com/assu/server/domain/qr/controller/RedirectController.java b/src/main/java/com/assu/server/domain/qr/controller/RedirectController.java new file mode 100644 index 0000000..f6e0710 --- /dev/null +++ b/src/main/java/com/assu/server/domain/qr/controller/RedirectController.java @@ -0,0 +1,35 @@ +package com.assu.server.domain.qr.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; + +@Controller +public class RedirectController { + @GetMapping("/verify") + public String handleQrRedirect( + @RequestParam(value = "storeId", required = false) Long storeId, + @RequestParam(value = "sessionId", required = false) Long sessionId, + @RequestParam(value = "adminId", required = false) Long adminId, + Model model) { + + String playStoreUrl = "https://play.google.com/store/apps/details?id=com.ssu.assu"; + + String appScheme = "assu-app://verify"; + String finalAppUrl = ""; + + if (storeId != null) { + finalAppUrl = appScheme + "?storeId=" + storeId; + } else if (sessionId != null && adminId != null) { + finalAppUrl = appScheme + "?sessionId=" + sessionId + "&adminId=" + adminId; + } else { + finalAppUrl = appScheme; + } + + model.addAttribute("appLink", finalAppUrl); + model.addAttribute("playStoreUrl", playStoreUrl); + + return "qr_bridge"; + } +} diff --git a/src/main/java/com/assu/server/global/config/SecurityConfig.java b/src/main/java/com/assu/server/global/config/SecurityConfig.java index 70e0228..e7e809a 100644 --- a/src/main/java/com/assu/server/global/config/SecurityConfig.java +++ b/src/main/java/com/assu/server/global/config/SecurityConfig.java @@ -20,6 +20,7 @@ public SecurityFilterChain filterChain(HttpSecurity http, JwtAuthFilter jwtAuthF .cors(cors -> {}) // 기본 CORS 구성 사용(필요하면 CorsConfigurationSource 빈 추가) .sessionManagement(sm -> sm.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) .authorizeHttpRequests(auth -> auth + .requestMatchers("/verify").permitAll() .requestMatchers(HttpMethod.OPTIONS, "/**").permitAll() // ✅ WebSocket 핸드셰이크 허용 (네이티브 + SockJS 모두 포함) diff --git a/src/main/resources/templates/qr_bridge.html b/src/main/resources/templates/qr_bridge.html new file mode 100644 index 0000000..1e5c339 --- /dev/null +++ b/src/main/resources/templates/qr_bridge.html @@ -0,0 +1,39 @@ + + + + + + ASSU 연결 중 + + + +
+
+

앱으로 연결 중입니다...

+

연결이 되지 않으면 여기를 클릭하여 설치해 주세요.

+
+ + + + \ No newline at end of file