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.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface SessionMemberId {

}
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,12 @@ public class SessionInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler){
HttpSession session = request.getSession(false);
if(session == null){
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;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package es.princip.ringus.global.resolver;

import es.princip.ringus.global.annotation.SessionMemberId;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.core.MethodParameter;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;

@Component
public class SessionMemberIdArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.hasParameterAnnotation(SessionMemberId.class);
}

@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) {
HttpServletRequest request = (HttpServletRequest) webRequest.getNativeRequest();
Long memberId = (Long) request.getAttribute("memberId");
System.out.println("[Argument Resolver] : resolveArgument 실행, memberId: " +memberId);

return memberId;
}
}
14 changes: 12 additions & 2 deletions src/main/java/es/princip/ringus/infra/config/WebConfig.java
Original file line number Diff line number Diff line change
@@ -1,30 +1,40 @@
package es.princip.ringus.infra.config;

import es.princip.ringus.global.interceptor.SessionInterceptor;
import es.princip.ringus.global.resolver.SessionMemberIdArgumentResolver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.util.List;

@Configuration
public class WebConfig implements WebMvcConfigurer {

private final SessionInterceptor sessionInterceptor;
private final SessionMemberIdArgumentResolver sessionMemberIdArgumentResolver;

@Autowired
public WebConfig(SessionInterceptor sessionInterceptor) {
public WebConfig(SessionInterceptor sessionInterceptor, SessionMemberIdArgumentResolver sessionMemberIdArgumentResolver) {
this.sessionInterceptor = sessionInterceptor;
this.sessionMemberIdArgumentResolver = sessionMemberIdArgumentResolver;
}

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

@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
resolvers.add(sessionMemberIdArgumentResolver);
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
package es.princip.ringus.presentation.member;

import es.princip.ringus.application.member.service.MemberService;
import es.princip.ringus.domain.exception.MemberErrorCode;
import es.princip.ringus.global.exception.CustomRuntimeException;
import es.princip.ringus.global.annotation.SessionMemberId;
import es.princip.ringus.global.util.ApiResponseWrapper;
import es.princip.ringus.presentation.member.dto.MemberResponse;
import jakarta.servlet.http.HttpSession;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
Expand All @@ -20,24 +18,15 @@ public class MemberController {
private final MemberService memberService;

@GetMapping("/me")
public ResponseEntity<ApiResponseWrapper<MemberResponse>> getMember(HttpSession session){

Long memberId = (Long)session.getAttribute("memberId");
if(memberId == null){
throw new CustomRuntimeException(MemberErrorCode.SESSION_EXPIRED);
}
public ResponseEntity<ApiResponseWrapper<MemberResponse>> getMember(@SessionMemberId Long memberId){

MemberResponse response = memberService.getMemberById(memberId);

return ResponseEntity.ok(ApiResponseWrapper.success(HttpStatus.OK, "성공", response));
}

@GetMapping("/check-session")
public ResponseEntity<ApiResponseWrapper<Void>> checkSession(HttpSession session){
Long memberId = (Long)session.getAttribute("memberId");
if(memberId == null){
throw new CustomRuntimeException(MemberErrorCode.SESSION_EXPIRED);
}
public ResponseEntity<ApiResponseWrapper<Void>> checkSession(){

return ResponseEntity.ok(ApiResponseWrapper.success(HttpStatus.OK, "성공"));
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
package es.princip.ringus.presentation.member.dto;

import es.princip.ringus.domain.member.Member;
import es.princip.ringus.domain.member.MemberType;

public record MemberResponse(
Long id,
MemberType memberType,
String email,
boolean isFileVerified,
boolean isProfileRegisterd,
boolean isUniversityVerified
) {
public static MemberResponse from(Member member) {
return new MemberResponse(
member.getId(),
member.getMemberType(),
Comment on lines -14 to +15
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

해당 부분 변경 요청하려고 했는데 미리 해주셨네요!

member.getEmail(),
member.isProfileRegistered(),
member.isProfileRegistered(),
Expand Down
Loading