admin: app layer 리팩토링
This commit is contained in:
parent
6cbe25b6b9
commit
6a1b4fe0c5
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
||||||
|
|
@ -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);
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
@ -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;
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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(),
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
Loading…
Reference in New Issue