Skip to content

Commit 22fa66a

Browse files
authored
Merge pull request #37 from Go-Socket-Project/feature/profile-search
Profile Search
2 parents e009402 + 99593bc commit 22fa66a

File tree

6 files changed

+71
-17
lines changed

6 files changed

+71
-17
lines changed

src/main/java/com/mycom/socket/auth/config/SecurityConfig.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
public class SecurityConfig{
2121

2222
private final JWTUtil jwtUtil;
23-
private final JWTProperties properties;
2423
private final MemberDetailsService memberDetailsService;
2524

2625
@Bean
@@ -32,7 +31,7 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
3231
.formLogin(AbstractHttpConfigurer::disable)
3332

3433
.addFilterBefore(
35-
new JWTFilter(properties, jwtUtil, memberDetailsService),
34+
new JWTFilter(jwtUtil, memberDetailsService),
3635
UsernamePasswordAuthenticationFilter.class
3736
)
3837

src/main/java/com/mycom/socket/auth/jwt/JWTFilter.java

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
package com.mycom.socket.auth.jwt;
22

3-
import com.mycom.socket.auth.config.JWTProperties;
43
import com.mycom.socket.auth.service.MemberDetailsService;
54
import jakarta.servlet.FilterChain;
65
import jakarta.servlet.ServletException;
7-
import jakarta.servlet.http.Cookie;
86
import jakarta.servlet.http.HttpServletRequest;
97
import jakarta.servlet.http.HttpServletResponse;
108
import lombok.RequiredArgsConstructor;
@@ -21,18 +19,22 @@
2119
@RequiredArgsConstructor
2220
public class JWTFilter extends OncePerRequestFilter {
2321

24-
private final JWTProperties jwtProperties;
22+
2523
private final JWTUtil jwtUtil;
2624
private final MemberDetailsService memberDetailsService;
2725

26+
private static final String BEARER_PREFIX = "Bearer ";
27+
private static final String TOKEN_TYPE = "ACCESS_TOKEN";
28+
2829
@Override
2930
protected void doFilterInternal(HttpServletRequest request,
3031
HttpServletResponse response,
3132
FilterChain filterChain) throws ServletException, IOException {
3233
try {
33-
String token = resolveTokenFromCookie(request);
34-
if (StringUtils.hasText(token) && jwtUtil.validateToken(token, "ACCESS_TOKEN")) {
35-
setAuthentication(token);
34+
// Bearer 토큰 확인
35+
String bearerToken = resolveTokenFromHeader(request);
36+
if (isValidBearerToken(bearerToken)) {
37+
setAuthentication(bearerToken);
3638
}
3739
} catch (Exception e) {
3840
log.warn("인증 처리 실패", e);
@@ -42,14 +44,10 @@ protected void doFilterInternal(HttpServletRequest request,
4244
filterChain.doFilter(request, response);
4345
}
4446

45-
private String resolveTokenFromCookie(HttpServletRequest request) {
46-
Cookie[] cookies = request.getCookies();
47-
if (cookies != null) {
48-
for (Cookie cookie : cookies) {
49-
if (jwtProperties.getAccessTokenCookieName().equals(cookie.getName())) {
50-
return cookie.getValue();
51-
}
52-
}
47+
private String resolveTokenFromHeader(HttpServletRequest request) {
48+
String bearerToken = request.getHeader("Authorization");
49+
if (StringUtils.hasText(bearerToken) && bearerToken.startsWith(BEARER_PREFIX)) {
50+
return bearerToken.substring(7);
5351
}
5452
return null;
5553
}
@@ -67,4 +65,10 @@ private void setAuthentication(String token) {
6765

6866
SecurityContextHolder.getContext().setAuthentication(authentication);
6967
}
68+
69+
private boolean isValidBearerToken(String token) {
70+
return StringUtils.hasText(token) &&
71+
token.matches("^[A-Za-z0-9-_=]+\\.[A-Za-z0-9-_=]+\\.?[A-Za-z0-9-_.+/=]*$") &&
72+
jwtUtil.validateToken(token, TOKEN_TYPE);
73+
}
7074
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.mycom.socket.go_socket.controller;
2+
3+
import com.mycom.socket.auth.security.MemberDetails;
4+
import com.mycom.socket.go_socket.dto.response.ProfileResponse;
5+
import lombok.RequiredArgsConstructor;
6+
import org.springframework.security.core.annotation.AuthenticationPrincipal;
7+
import org.springframework.web.bind.annotation.GetMapping;
8+
import org.springframework.web.bind.annotation.RequestMapping;
9+
import org.springframework.web.bind.annotation.RestController;
10+
11+
@RestController
12+
@RequiredArgsConstructor
13+
@RequestMapping("/api/profile")
14+
public class ProfileController {
15+
16+
@GetMapping
17+
public ProfileResponse getProfile(@AuthenticationPrincipal MemberDetails memberDetails) {
18+
return ProfileResponse.of(memberDetails.getMember());
19+
}
20+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.mycom.socket.go_socket.dto.response;
2+
3+
import com.mycom.socket.go_socket.entity.Member;
4+
5+
public record ProfileResponse(
6+
String email,
7+
String nickname,
8+
String intro
9+
) {
10+
public static ProfileResponse of(Member member) {
11+
return new ProfileResponse(
12+
member.getEmail(),
13+
member.getNickname(),
14+
member.getIntro()
15+
);
16+
}
17+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.mycom.socket.go_socket.service;
2+
3+
import com.mycom.socket.go_socket.repository.MemberRepository;
4+
import lombok.RequiredArgsConstructor;
5+
import org.springframework.stereotype.Service;
6+
import org.springframework.transaction.annotation.Transactional;
7+
8+
@Service
9+
@RequiredArgsConstructor
10+
@Transactional(readOnly = true)
11+
public class MemberService {
12+
13+
private final MemberRepository memberRepository;
14+
}

src/main/resources/yaml/application-dev.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ spring:
22
jpa:
33
show-sql: true
44
hibernate:
5-
ddl-auto: create
5+
ddl-auto: update

0 commit comments

Comments
 (0)