Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package es.princip.ringus.global.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface SessionCheck {
boolean required() default true;
}
Original file line number Diff line number Diff line change
@@ -1,25 +1,39 @@
package es.princip.ringus.global.interceptor;

import es.princip.ringus.domain.exception.MemberErrorCode;
import es.princip.ringus.global.annotation.SessionCheck;
import es.princip.ringus.global.exception.CustomRuntimeException;
import es.princip.ringus.global.util.CookieUtil;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;

@Component
public class SessionInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler){
if(isCheckSession(handler)){
vaildateSession(request, response);
}
return true;
}

private boolean isCheckSession(Object handler){
return handler instanceof HandlerMethod handlerMethod && handlerMethod.hasMethodAnnotation(SessionCheck.class);
}

private void vaildateSession(HttpServletRequest request, HttpServletResponse response){
HttpSession session = request.getSession(false);

if(session == null || session.getAttribute("memberId") == null){
throw new CustomRuntimeException(MemberErrorCode.SESSION_EXPIRED);
}

System.out.println("[Session Interceptor] : Interceptor 실행, 세션 유효, 멤버 ID: " + session.getAttribute("memberId"));
CookieUtil.addSessionCookie(response, session.getId());
request.setAttribute("memberId", session.getAttribute("memberId"));
return true;
}
}
8 changes: 1 addition & 7 deletions src/main/java/es/princip/ringus/infra/config/WebConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,7 @@ public WebConfig(SessionInterceptor sessionInterceptor, SessionMemberIdArgumentR

@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(sessionInterceptor)
.excludePathPatterns("/auth/**")
.excludePathPatterns("/service-terms")
.excludePathPatterns("/swagger-ui/**")
.excludePathPatterns("/v3/api-docs/**")
.excludePathPatterns("/swagger-resources/**")
.excludePathPatterns("/webjars/**");
registry.addInterceptor(sessionInterceptor);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package es.princip.ringus.presentation.member;

import es.princip.ringus.application.member.service.MemberService;
import es.princip.ringus.global.annotation.SessionCheck;
import es.princip.ringus.global.annotation.SessionMemberId;
import es.princip.ringus.global.util.ApiResponseWrapper;
import es.princip.ringus.presentation.member.dto.MemberResponse;
Expand All @@ -17,6 +18,7 @@
public class MemberController {
private final MemberService memberService;

@SessionCheck
@GetMapping("/me")
public ResponseEntity<ApiResponseWrapper<MemberResponse>> getMember(@SessionMemberId Long memberId){

Expand All @@ -25,6 +27,7 @@ public ResponseEntity<ApiResponseWrapper<MemberResponse>> getMember(@SessionMemb
return ResponseEntity.ok(ApiResponseWrapper.success(HttpStatus.OK, "성공", response));
}

@SessionCheck
@GetMapping("/check-session")
public ResponseEntity<ApiResponseWrapper<Void>> checkSession(){

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package es.princip.ringus.presentation.mentee;

import es.princip.ringus.application.mentee.service.MenteeService;
import es.princip.ringus.global.annotation.SessionCheck;
import es.princip.ringus.global.annotation.SessionMemberId;
import es.princip.ringus.global.util.ApiResponseWrapper;
import es.princip.ringus.presentation.mentee.dto.*;
Expand All @@ -16,6 +17,7 @@
public class MenteeController implements MenteeControllerDocs{
private final MenteeService menteeService;

@SessionCheck
@PostMapping
public ResponseEntity<ApiResponseWrapper<MenteeResponse>> create(
@SessionMemberId Long memberId,
Expand All @@ -25,6 +27,7 @@ public ResponseEntity<ApiResponseWrapper<MenteeResponse>> create(
return ResponseEntity.ok(ApiResponseWrapper.success(HttpStatus.OK, "성공", response));
}

@SessionCheck
@PutMapping
public ResponseEntity<ApiResponseWrapper<EditMenteeResponse>> update(
@SessionMemberId Long memberId,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package es.princip.ringus.presentation.mentor;

import es.princip.ringus.application.mentor.service.MentorService;
import es.princip.ringus.global.annotation.SessionCheck;
import es.princip.ringus.global.annotation.SessionMemberId;
import es.princip.ringus.global.util.ApiResponseWrapper;
import es.princip.ringus.presentation.mentor.dto.*;
Expand All @@ -17,6 +18,7 @@ public class MentorController implements MentorControllerDocs{

private final MentorService mentorService;

@SessionCheck
@PostMapping
public ResponseEntity<ApiResponseWrapper<MentorResponse>> create(
@SessionMemberId Long memberId,
Expand All @@ -25,6 +27,7 @@ public ResponseEntity<ApiResponseWrapper<MentorResponse>> create(
return ResponseEntity.ok(ApiResponseWrapper.success(HttpStatus.OK, "성공", response));
}

@SessionCheck
@PutMapping
public ResponseEntity<ApiResponseWrapper<EditMentorResponse>> update(
@SessionMemberId Long memberId,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package es.princip.ringus.presentation.mentoring;

import es.princip.ringus.application.mentoring.MentoringService;
import es.princip.ringus.global.annotation.SessionCheck;
import es.princip.ringus.global.annotation.SessionMemberId;
import es.princip.ringus.global.util.ApiResponseWrapper;
import es.princip.ringus.presentation.mentoring.dto.CreateMentoringRequest;
Expand All @@ -21,6 +22,7 @@ public class MentoringController implements MentoringControllerDocs {

private final MentoringService mentoringService;

@SessionCheck
@PostMapping
public ResponseEntity<ApiResponseWrapper<MentoringResponse>> suggest(
@SessionMemberId Long memberId,
Expand Down