admin: app layer 리팩토링

This commit is contained in:
geonhos 2024-05-23 12:17:23 +09:00
parent 6cbe25b6b9
commit 6a1b4fe0c5
11 changed files with 36 additions and 35 deletions

View File

@ -9,9 +9,11 @@ import com.bpgroup.poc.admin.filter.AdminActionLogCreate;
import com.bpgroup.poc.admin.filter.AdminActionLogUpdate; import com.bpgroup.poc.admin.filter.AdminActionLogUpdate;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
@Transactional
public class AdminActionLogAppService { public class AdminActionLogAppService {
private final AdminActionLogService adminActionLogService; private final AdminActionLogService adminActionLogService;

View File

@ -18,7 +18,7 @@ import org.springframework.transaction.annotation.Transactional;
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
@Transactional @Transactional
public class AdminManagementAppService { public class AdminAppService {
private final PasswordEncoder passwordEncoder; private final PasswordEncoder passwordEncoder;

View File

@ -4,7 +4,7 @@ import com.bpgroup.poc.admin.app.authentication.exception.AdminNotFoundException
import com.bpgroup.poc.admin.app.authentication.exception.DoNotHaveAnyMenuException; import com.bpgroup.poc.admin.app.authentication.exception.DoNotHaveAnyMenuException;
import com.bpgroup.poc.admin.app.authentication.exception.InvalidPasswordException; import com.bpgroup.poc.admin.app.authentication.exception.InvalidPasswordException;
import com.bpgroup.poc.admin.domain.admin.entity.Admin; import com.bpgroup.poc.admin.domain.admin.entity.Admin;
import com.bpgroup.poc.admin.domain.admin.entity.AdminRepository; import com.bpgroup.poc.admin.domain.admin.service.AdminService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -12,14 +12,14 @@ import org.springframework.transaction.annotation.Transactional;
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
public class AuthenticationService { public class AuthenticationAppService {
private final PasswordEncoder passwordEncoder; private final PasswordEncoder passwordEncoder;
private final AdminRepository adminRepository; private final AdminService adminService;
@Transactional @Transactional
public AuthenticationResult login(String username, String password) throws AdminNotFoundException, InvalidPasswordException, DoNotHaveAnyMenuException { public AuthenticationResult login(String username, String password) throws AdminNotFoundException, InvalidPasswordException, DoNotHaveAnyMenuException {
Admin findAdmin = adminRepository.findByLoginId(username).orElseThrow(() -> new AdminNotFoundException(username)); Admin findAdmin = adminService.find(username).orElseThrow(() -> new AdminNotFoundException(username));
if (!passwordEncoder.matches(password, findAdmin.getPassword())) { if (!passwordEncoder.matches(password, findAdmin.getPassword())) {
throw new InvalidPasswordException(username); throw new InvalidPasswordException(username);

View File

@ -1,7 +1,7 @@
package com.bpgroup.poc.admin.app.authorization; package com.bpgroup.poc.admin.app.authorization;
import com.bpgroup.poc.admin.domain.admin.entity.Admin; import com.bpgroup.poc.admin.domain.admin.entity.Admin;
import com.bpgroup.poc.admin.domain.admin.entity.AdminRepository; import com.bpgroup.poc.admin.domain.admin.service.AdminService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -13,12 +13,12 @@ import java.util.Optional;
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
@Transactional @Transactional
public class AuthorizationService { public class AuthorizationAppService {
private final AdminRepository adminRepository; private final AdminService adminService;
public boolean isAuthorized(String username, String requestUri) { public boolean isAuthorized(String username, String requestUri) {
Optional<Admin> findAdmin = adminRepository.findByLoginId(username); Optional<Admin> findAdmin = adminService.find(username);
if (findAdmin.isEmpty()) { if (findAdmin.isEmpty()) {
return false; return false;
} }

View File

@ -11,7 +11,7 @@ import org.springframework.transaction.annotation.Transactional;
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
@Transactional @Transactional
public class JwtTokenService { public class JwtTokenAppService {
private final AdminService adminService; private final AdminService adminService;
private final AdminTokenService adminTokenService; private final AdminTokenService adminTokenService;

View File

@ -1,11 +1,11 @@
package com.bpgroup.poc.admin.security; package com.bpgroup.poc.admin.security;
import com.bpgroup.poc.admin.app.jwt.JwtTokenService; import com.bpgroup.poc.admin.app.jwt.JwtTokenAppService;
import com.bpgroup.poc.admin.security.authentication.*; import com.bpgroup.poc.admin.security.authentication.*;
import com.bpgroup.poc.admin.app.authentication.AuthenticationService; import com.bpgroup.poc.admin.app.authentication.AuthenticationAppService;
import com.bpgroup.poc.admin.security.authorization.CustomAccessDeniedHandler; import com.bpgroup.poc.admin.security.authorization.CustomAccessDeniedHandler;
import com.bpgroup.poc.admin.security.authorization.CustomAuthorizationManager; import com.bpgroup.poc.admin.security.authorization.CustomAuthorizationManager;
import com.bpgroup.poc.admin.app.authorization.AuthorizationService; import com.bpgroup.poc.admin.app.authorization.AuthorizationAppService;
import com.bpgroup.poc.admin.security.jwt.JwtTokenConstants; import com.bpgroup.poc.admin.security.jwt.JwtTokenConstants;
import com.bpgroup.poc.admin.security.jwt.JwtTokenProvider; import com.bpgroup.poc.admin.security.jwt.JwtTokenProvider;
import com.bpgroup.poc.admin.security.jwt.JwtTokenValidateFilter; import com.bpgroup.poc.admin.security.jwt.JwtTokenValidateFilter;
@ -36,9 +36,9 @@ public class SecurityConfig {
private static final String LOGOUT_PATH = "/logout"; private static final String LOGOUT_PATH = "/logout";
private static final String ERROR_PATH = "/error"; private static final String ERROR_PATH = "/error";
private final AuthenticationService authenticationService; private final AuthenticationAppService authenticationAppService;
private final AuthorizationService authorizationService; private final AuthorizationAppService authorizationAppService;
private final JwtTokenService jwtTokenService; private final JwtTokenAppService jwtTokenAppService;
private final JwtTokenProvider jwtTokenProvider; private final JwtTokenProvider jwtTokenProvider;
@ -73,7 +73,7 @@ public class SecurityConfig {
.requestMatchers("/common/modal/**").permitAll() .requestMatchers("/common/modal/**").permitAll()
.requestMatchers(LOGIN_PATH, LOGOUT_PATH, ERROR_PATH).permitAll() .requestMatchers(LOGIN_PATH, LOGOUT_PATH, ERROR_PATH).permitAll()
.anyRequest() .anyRequest()
.access(new CustomAuthorizationManager(authorizationService)) .access(new CustomAuthorizationManager(authorizationAppService))
); );
} }
@ -101,7 +101,7 @@ public class SecurityConfig {
@Bean @Bean
public CustomAuthenticationProvider customAuthenticationProvider() { public CustomAuthenticationProvider customAuthenticationProvider() {
return new CustomAuthenticationProvider(authenticationService); return new CustomAuthenticationProvider(authenticationAppService);
} }
@Bean @Bean

View File

@ -1,7 +1,7 @@
package com.bpgroup.poc.admin.security.authentication; package com.bpgroup.poc.admin.security.authentication;
import com.bpgroup.poc.admin.app.authentication.AuthenticationResult; import com.bpgroup.poc.admin.app.authentication.AuthenticationResult;
import com.bpgroup.poc.admin.app.authentication.AuthenticationService; import com.bpgroup.poc.admin.app.authentication.AuthenticationAppService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.security.authentication.AuthenticationProvider; import org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
@ -12,7 +12,7 @@ import org.springframework.transaction.annotation.Transactional;
@RequiredArgsConstructor @RequiredArgsConstructor
public class CustomAuthenticationProvider implements AuthenticationProvider { public class CustomAuthenticationProvider implements AuthenticationProvider {
private final AuthenticationService authenticationService; private final AuthenticationAppService authenticationAppService;
@Transactional @Transactional
@Override @Override
@ -21,7 +21,7 @@ public class CustomAuthenticationProvider implements AuthenticationProvider {
String username = (String) authentication.getPrincipal(); String username = (String) authentication.getPrincipal();
String password = (String) authentication.getCredentials(); String password = (String) authentication.getCredentials();
AuthenticationResult authenticationResult = authenticationService.login(username, password); AuthenticationResult authenticationResult = authenticationAppService.login(username, password);
return buildAuthenticationToken(authenticationResult); return buildAuthenticationToken(authenticationResult);
} catch (Exception e) { } catch (Exception e) {

View File

@ -1,6 +1,6 @@
package com.bpgroup.poc.admin.security.authorization; package com.bpgroup.poc.admin.security.authorization;
import com.bpgroup.poc.admin.app.authorization.AuthorizationService; import com.bpgroup.poc.admin.app.authorization.AuthorizationAppService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.security.authorization.AuthorizationDecision; import org.springframework.security.authorization.AuthorizationDecision;
import org.springframework.security.authorization.AuthorizationManager; import org.springframework.security.authorization.AuthorizationManager;
@ -12,7 +12,7 @@ import java.util.function.Supplier;
@RequiredArgsConstructor @RequiredArgsConstructor
public class CustomAuthorizationManager implements AuthorizationManager<RequestAuthorizationContext> { public class CustomAuthorizationManager implements AuthorizationManager<RequestAuthorizationContext> {
private final AuthorizationService authorizationService; private final AuthorizationAppService authorizationAppService;
@Override @Override
public AuthorizationDecision check(Supplier authentication, RequestAuthorizationContext context) { public AuthorizationDecision check(Supplier authentication, RequestAuthorizationContext context) {
@ -21,7 +21,7 @@ public class CustomAuthorizationManager implements AuthorizationManager<RequestA
String userName = (String) auth.getPrincipal(); String userName = (String) auth.getPrincipal();
String requestUri = context.getRequest().getRequestURI(); String requestUri = context.getRequest().getRequestURI();
boolean hasAuthorization = authorizationService.isAuthorized(userName, requestUri); boolean hasAuthorization = authorizationAppService.isAuthorized(userName, requestUri);
return new AuthorizationDecision(hasAuthorization); return new AuthorizationDecision(hasAuthorization);
} }

View File

@ -1,7 +1,7 @@
package com.bpgroup.poc.admin.security.jwt; package com.bpgroup.poc.admin.security.jwt;
import com.bpgroup.poc.admin.app.jwt.JwtTokenRequest; import com.bpgroup.poc.admin.app.jwt.JwtTokenRequest;
import com.bpgroup.poc.admin.app.jwt.JwtTokenService; import com.bpgroup.poc.admin.app.jwt.JwtTokenAppService;
import com.bpgroup.poc.admin.domain.admin.entity.TokenState; import com.bpgroup.poc.admin.domain.admin.entity.TokenState;
import io.jsonwebtoken.Claims; import io.jsonwebtoken.Claims;
import io.jsonwebtoken.ExpiredJwtException; import io.jsonwebtoken.ExpiredJwtException;
@ -22,7 +22,7 @@ import java.util.Date;
@RequiredArgsConstructor @RequiredArgsConstructor
public class JwtTokenProvider { public class JwtTokenProvider {
private final JwtTokenService jwtTokenService; private final JwtTokenAppService jwtTokenAppService;
// TODO: 추후 Key 별도 관리 필요 // TODO: 추후 Key 별도 관리 필요
private static final SecretKey JWT_KEY = Keys.hmacShaKeyFor(JwtTokenConstants.KEY.getBytes(StandardCharsets.UTF_8)); private static final SecretKey JWT_KEY = Keys.hmacShaKeyFor(JwtTokenConstants.KEY.getBytes(StandardCharsets.UTF_8));
@ -34,7 +34,7 @@ public class JwtTokenProvider {
Cookie refreshTokenCookie = createCookieWithToken(username, JwtTokenProvider.JwtTokenType.REFRESH); Cookie refreshTokenCookie = createCookieWithToken(username, JwtTokenProvider.JwtTokenType.REFRESH);
response.addCookie(refreshTokenCookie); response.addCookie(refreshTokenCookie);
jwtTokenService.save( jwtTokenAppService.save(
JwtTokenRequest.of( JwtTokenRequest.of(
request.getRemoteAddr(), request.getRemoteAddr(),
accessTokenCookie.getValue(), accessTokenCookie.getValue(),

View File

@ -1,6 +1,6 @@
package com.bpgroup.poc.admin.web.main.admin.management; package com.bpgroup.poc.admin.web.main.admin.management;
import com.bpgroup.poc.admin.app.admin.AdminManagementAppService; import com.bpgroup.poc.admin.app.admin.AdminAppService;
import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdminCreate; import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdminCreate;
import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdminDelete; import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdminDelete;
import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdminFind; import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdminFind;
@ -20,7 +20,7 @@ import java.util.List;
public class AdminManagementRestController { public class AdminManagementRestController {
private final AdminManagementWebService adminManagementWebService; private final AdminManagementWebService adminManagementWebService;
private final AdminManagementAppService adminManagementAppService; private final AdminAppService adminAppService;
/** /**
* 전체 조회 * 전체 조회
@ -57,7 +57,7 @@ public class AdminManagementRestController {
@RequestBody @Validated AdminCreate.Request request, @RequestBody @Validated AdminCreate.Request request,
BindingResult bindingResult BindingResult bindingResult
) { ) {
AdminCreate.Response response = adminManagementAppService.create(request); AdminCreate.Response response = adminAppService.create(request);
return ResponseEntity.ok(response); return ResponseEntity.ok(response);
} }
@ -66,7 +66,7 @@ public class AdminManagementRestController {
@RequestBody @Validated AdminUpdate.Request request, @RequestBody @Validated AdminUpdate.Request request,
BindingResult bindingResult BindingResult bindingResult
) { ) {
AdminUpdate.Response response = adminManagementAppService.update(request); AdminUpdate.Response response = adminAppService.update(request);
return ResponseEntity.ok(response); return ResponseEntity.ok(response);
} }
@ -78,7 +78,7 @@ public class AdminManagementRestController {
@RequestBody @Validated AdminDelete.Request request, @RequestBody @Validated AdminDelete.Request request,
BindingResult bindingResult BindingResult bindingResult
) { ) {
AdminDelete.Response response = adminManagementAppService.delete(request); AdminDelete.Response response = adminAppService.delete(request);
return ResponseEntity.ok(response); return ResponseEntity.ok(response);
} }

View File

@ -6,7 +6,6 @@ import com.bpgroup.poc.admin.domain.admin.entity.AdminRole;
import com.bpgroup.poc.admin.domain.role.entity.Role; import com.bpgroup.poc.admin.domain.role.entity.Role;
import com.bpgroup.poc.admin.domain.role.entity.RoleRepository; import com.bpgroup.poc.admin.domain.role.entity.RoleRepository;
import com.bpgroup.poc.admin.env.MariaDBTestEnv; import com.bpgroup.poc.admin.env.MariaDBTestEnv;
import com.bpgroup.poc.admin.app.admin.AdminManagementAppService;
import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdminCreate; import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdminCreate;
import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdminDelete; import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdminDelete;
import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdminUpdate; import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdminUpdate;
@ -19,10 +18,10 @@ import static org.assertj.core.api.Assertions.assertThat;
@DisplayName("Admin Web Service 테스트") @DisplayName("Admin Web Service 테스트")
@Transactional @Transactional
class AdminManagementAppServiceTest extends MariaDBTestEnv { class AdminAppServiceTest extends MariaDBTestEnv {
@Autowired @Autowired
private AdminManagementAppService adminAppService; private AdminAppService adminAppService;
@Autowired @Autowired
private AdminRepository adminRepository; private AdminRepository adminRepository;