Skip to content

Commit

Permalink
[ARV-36] feat: jwt swagger 추가 (#34)
Browse files Browse the repository at this point in the history
  • Loading branch information
sangcci authored Nov 25, 2024
1 parent 0d132e1 commit a2bcfb7
Show file tree
Hide file tree
Showing 4 changed files with 116 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,12 @@ public CustomAccessDeniedHandler(
public void handle(HttpServletRequest request, HttpServletResponse response,
AccessDeniedException accessDeniedException) throws IOException, ServletException {
Exception exception = (Exception) request.getAttribute("jakarta.servlet.error.exception");
log.info("권한 없음 예외 발생: {}", exception);
resolver.resolveException(request, response, null, exception);
if (exception != null) {
log.info("권한 없음 예외 발생: {}", exception);
resolver.resolveException(request, response, null, exception);
} else {
log.info("권한 없음 예외 발생: {}", accessDeniedException);
resolver.resolveException(request, response, null, accessDeniedException);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.backend.allreva.auth.util;


import java.util.HashMap;
import java.util.Map;
import org.springframework.stereotype.Component;

@Component
public class JwtTestTokenInitializer {

private final Map<String, String> jwtTokens;

public JwtTestTokenInitializer(JwtProvider jwtProvider) {
this.jwtTokens = new HashMap<>();

jwtTokens.put("ADMIN", jwtProvider.generateRefreshToken(String.valueOf(1L)));
jwtTokens.put("USER", jwtProvider.generateRefreshToken(String.valueOf(2L)));
jwtTokens.put("GUEST", jwtProvider.generateRefreshToken(String.valueOf(3L)));

jwtTokens.forEach((role, token) ->
System.out.println(role + " Token: " + token));
}

public String getToken(String role) {
return jwtTokens.get(role);
}
}
37 changes: 35 additions & 2 deletions src/main/java/com/backend/allreva/common/config/SwaggerConfig.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,49 @@
package com.backend.allreva.common.config;

import com.backend.allreva.auth.util.JwtTestTokenInitializer;
import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@RequiredArgsConstructor
public class SwaggerConfig {

private final JwtTestTokenInitializer jwtTestTokenInitializer;

@Bean
public OpenAPI openAPI() {
public OpenAPI customOpenAPI() {
SecurityScheme userScheme = createSecurityScheme("USER", jwtTestTokenInitializer.getToken("USER"));
SecurityScheme adminScheme = createSecurityScheme("ADMIN", jwtTestTokenInitializer.getToken("ADMIN"));
SecurityScheme guestScheme = createSecurityScheme("GUEST", jwtTestTokenInitializer.getToken("GUEST"));

SecurityRequirement userRequirement = new SecurityRequirement().addList("USER");
SecurityRequirement adminRequirement = new SecurityRequirement().addList("ADMIN");
SecurityRequirement guestRequirement = new SecurityRequirement().addList("GUEST");

return new OpenAPI()
.info(new Info().title("AllReva"));
.info(new Info().title("AllReva"))
.components(new Components()
.addSecuritySchemes("USER", userScheme)
.addSecuritySchemes("ADMIN", adminScheme)
.addSecuritySchemes("GUEST", guestScheme))
.addSecurityItem(userRequirement)
.addSecurityItem(adminRequirement)
.addSecurityItem(guestRequirement);
}

private SecurityScheme createSecurityScheme(String role, String token) {
return new SecurityScheme()
.type(SecurityScheme.Type.HTTP)
.scheme("bearer")
.bearerFormat("JWT")
.name("Authorization")
.description(String.format("%s Token: %s", role, token))
.in(SecurityScheme.In.HEADER);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package com.backend.allreva.common.runner;

import com.backend.allreva.common.model.Email;
import com.backend.allreva.member.command.application.MemberRepository;
import com.backend.allreva.member.command.domain.Member;
import com.backend.allreva.member.command.domain.value.LoginProvider;
import com.backend.allreva.member.command.domain.value.MemberRole;
import lombok.RequiredArgsConstructor;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
@RequiredArgsConstructor
public class MemberDummyDataInitializer implements CommandLineRunner {

private final MemberRepository memberRepository;

@Override
public void run(String... args) throws Exception {
Member admin = Member.builder()
.email(Email.builder().email("[email protected]").build())
.nickname("admin")
.loginProvider(LoginProvider.GOOGLE)
.memberRole(MemberRole.ADMIN)
.introduce("test")
.profileImageUrl("https://my_picture")
.build();
memberRepository.save(admin);

Member user = Member.builder()
.email(Email.builder().email("[email protected]").build())
.nickname("user")
.loginProvider(LoginProvider.GOOGLE)
.memberRole(MemberRole.USER)
.introduce("test")
.profileImageUrl("https://my_picture")
.build();
memberRepository.save(user);

Member guest = Member.createTemporary(
"[email protected]",
"guest",
LoginProvider.GOOGLE,
"https://my_picture");
memberRepository.save(guest);
}
}

0 comments on commit a2bcfb7

Please sign in to comment.