Skip to content

Commit cff695f

Browse files
committed
🔧 chore: 임시 토큰 발급 설정 추가
1 parent 3aeea06 commit cff695f

File tree

3 files changed

+84
-0
lines changed

3 files changed

+84
-0
lines changed

backend/src/main/java/io/f1/backend/domain/admin/entity/Admin.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,15 @@
88
import jakarta.persistence.GenerationType;
99
import jakarta.persistence.Id;
1010

11+
import lombok.Builder;
1112
import lombok.Getter;
1213

1314
import java.time.LocalDateTime;
15+
import lombok.NoArgsConstructor;
1416

1517
@Entity
1618
@Getter
19+
@NoArgsConstructor
1720
public class Admin extends BaseEntity {
1821

1922
@Id
@@ -32,4 +35,12 @@ public class Admin extends BaseEntity {
3235
public void updateLastLogin(LocalDateTime lastLogin) {
3336
this.lastLogin = lastLogin;
3437
}
38+
39+
@Builder
40+
public Admin(Long id, String username, String password, LocalDateTime lastLogin) {
41+
this.id = id;
42+
this.username = username;
43+
this.password = password;
44+
this.lastLogin = LocalDateTime.now();
45+
}
3546
}

backend/src/main/java/io/f1/backend/global/config/SecurityConfig.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import io.f1.backend.domain.user.app.handler.OAuthSuccessHandler;
88
import io.f1.backend.domain.user.app.handler.UserAndAdminLogoutSuccessHandler;
99

10+
import io.f1.backend.global.filter.DevTokenAuthFilter;
1011
import lombok.RequiredArgsConstructor;
1112

1213
import org.springframework.context.annotation.Bean;
@@ -17,6 +18,7 @@
1718
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
1819
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
1920
import org.springframework.security.web.SecurityFilterChain;
21+
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
2022

2123
@Configuration
2224
@EnableWebSecurity
@@ -34,6 +36,7 @@ public class SecurityConfig {
3436
public SecurityFilterChain userFilterChain(HttpSecurity http) throws Exception {
3537
http.csrf(AbstractHttpConfigurer::disable)
3638
.cors(Customizer.withDefaults())
39+
.addFilterBefore(new DevTokenAuthFilter(), UsernamePasswordAuthenticationFilter.class)
3740
.exceptionHandling(
3841
exception ->
3942
exception.authenticationEntryPoint(customAuthenticationEntryPoint))
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package io.f1.backend.global.filter;
2+
3+
import io.f1.backend.domain.admin.dto.AdminPrincipal;
4+
import io.f1.backend.domain.admin.entity.Admin;
5+
import io.f1.backend.domain.user.dto.UserPrincipal;
6+
import io.f1.backend.domain.user.entity.User;
7+
import jakarta.servlet.FilterChain;
8+
import jakarta.servlet.ServletException;
9+
import jakarta.servlet.http.HttpServletRequest;
10+
import jakarta.servlet.http.HttpServletResponse;
11+
import java.io.IOException;
12+
import java.time.LocalDateTime;
13+
import java.util.List;
14+
import java.util.Map;
15+
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
16+
import org.springframework.security.core.Authentication;
17+
import org.springframework.security.core.GrantedAuthority;
18+
import org.springframework.security.core.authority.SimpleGrantedAuthority;
19+
import org.springframework.security.core.context.SecurityContextHolder;
20+
import org.springframework.stereotype.Component;
21+
import org.springframework.web.filter.OncePerRequestFilter;
22+
23+
@Component
24+
public class DevTokenAuthFilter extends OncePerRequestFilter {
25+
26+
private static final String DEV_TOKEN = "dev-secret-token-1234";
27+
private static final String ADMIN_TOKEN = "admin-secret-token-1234";
28+
29+
@Override
30+
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
31+
FilterChain filterChain) throws ServletException, IOException {
32+
33+
User fakeUser = User.builder()
34+
.provider("kakao")
35+
.providerId("dev")
36+
.lastLogin(LocalDateTime.now())
37+
.build();
38+
39+
fakeUser.setId(1L);
40+
fakeUser.updateNickname("user");
41+
42+
UserPrincipal principal = new UserPrincipal(fakeUser, Map.of());
43+
44+
Admin fakeAdmin = Admin.builder()
45+
.id(1L)
46+
.username("admin")
47+
.password("admin")
48+
.lastLogin(LocalDateTime.now())
49+
.build();
50+
51+
AdminPrincipal adminPrincipal = new AdminPrincipal(fakeAdmin);
52+
53+
String authHeader = request.getHeader("Authorization");
54+
55+
if (authHeader != null && authHeader.equals("Bearer " + DEV_TOKEN)) {
56+
List<GrantedAuthority> authorities = List.of(new SimpleGrantedAuthority("ROLE_USER"));
57+
58+
Authentication auth = new UsernamePasswordAuthenticationToken(principal, null,
59+
authorities);
60+
SecurityContextHolder.getContext().setAuthentication(auth);
61+
} else if (authHeader != null && authHeader.equals("Bearer " + ADMIN_TOKEN)) {
62+
List<GrantedAuthority> authorities = List.of(new SimpleGrantedAuthority("ROLE_ADMIN"));
63+
64+
Authentication auth = new UsernamePasswordAuthenticationToken(adminPrincipal, null,
65+
authorities);
66+
SecurityContextHolder.getContext().setAuthentication(auth);
67+
}
68+
filterChain.doFilter(request, response);
69+
}
70+
}

0 commit comments

Comments
 (0)