Cute Running Puppy

๐ŸƒSpring/Interceptor

# ์Šคํ”„๋ง ์ธํ„ฐ์…‰ํ„ฐ๋กœ ๋กœ๊ทธ์ธ ์ƒํƒœ ์ฒดํฌ ๊ตฌํ˜„ํ•˜๊ธฐ (Session ๊ธฐ๋ฐ˜ ์ ‘๊ทผ ์ œ์–ด)

๋ญ‰์ง€๋ง˜ 2025. 5. 28. 17:37

LoginCheckInterceptor

package com.suri.farm.interceptor;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import org.springframework.web.servlet.HandlerInterceptor;

import java.io.PrintWriter;

public class LoginCheckInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {

        HttpSession session = request.getSession(false);
        Object id = (session != null) ? session.getAttribute("id") : null;

        System.out.println("์š”์ฒญ ๋ฉ”์„œ๋“œ: " + request.getMethod());

        if (id == null) {
            // ์š”์ฒญ ๋ฐฉ์‹์ด POST์ธ ๊ฒฝ์šฐ (์ฆ‰, API ์š”์ฒญ)
            if ("POST".equalsIgnoreCase(request.getMethod())) {
                response.setContentType("application/json; charset=UTF-8");
                response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
                response.getWriter().write("{\"error\": \"unauthorized\", \"message\": \"๋กœ๊ทธ์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.\"}");
                return false;
            }

            response.setContentType("text/html; charset=UTF-8");
            PrintWriter out = response.getWriter();
            out.println("<script>");
            out.println("alert('๋กœ๊ทธ์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.');");
            out.println("location.href='/member/login';");
            out.println("</script>");
            out.flush();
            return false;
        }

        return true;
    }
}

 

WebMvcConfig

package com.suri.farm.config;

import com.suri.farm.interceptor.LoginCheckInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginCheckInterceptor())
                .addPathPatterns(
                        "๊ฑธ๋Ÿฌ๋‚ผ ๊ฒฝ๋กœ"
                        )
                .excludePathPatterns(
                    	"์ œ์™ธํ•  ๊ฒฝ๋กœ",
                        "/login",
                        "/logout",
                        "/css/**",
                        "/js/**",
                        "/images/**",
                );
    }
}