수정건 수정

This commit is contained in:
USER
2022-08-31 12:25:39 +09:00
parent 188a6112b4
commit 648a16ad4f
23 changed files with 182 additions and 127 deletions

View File

@@ -114,11 +114,11 @@ body{
/*====================== /*======================
.popup .popup
======================*/ ======================*/
.dimmed {width: 100vw; height: 100vh; position: fixed; top: 0; left: 0; background: rgba(0,0,0,0.4); display: none;} .dimmed {width: 100vw; height: 100vh; position: fixed; top: 0; left: 0; background: rgba(0,0,0,0.2); display: none;}
.dimmed.open {display: block !important;} .dimmed.open {display: block !important;}
.popup-wrap {display: none;} .popup-wrap {display: none;}
.popup-wrap.open {display: block !important;} .popup-wrap.open {display: block !important;}
.popup {width: 390px; border-radius: 12px; background: #fff; padding: 0 30px; box-sizing: border-box; border: 1px solid rgba(197,197,197,0.36); box-shadow: 2px 2px 8px rgba(171,171,171,0.30); position: fixed; top: 50%; left: 50%; transform: translate(-50%,-50%); -webkit-transform: translate(-50%,-50%); -moz-transform: translate(-50%,-50%); -o-transform: translate(-50%,-50%); display: none; .popup {width: 390px; z-index: 998; border-radius: 12px; background: #fff; padding: 0 30px; box-sizing: border-box; border: 1px solid rgba(197,197,197,0.36); box-shadow: 2px 2px 8px rgba(171,171,171,0.30); position: fixed; top: 50%; left: 50%; transform: translate(-50%,-50%); -webkit-transform: translate(-50%,-50%); -moz-transform: translate(-50%,-50%); -o-transform: translate(-50%,-50%); display: none;
max-height: 90vh; overflow: auto;}/*스크린 height 100%를 벗어나는 긴 팝업의 경우 추가 class*/ max-height: 90vh; overflow: auto;}/*스크린 height 100%를 벗어나는 긴 팝업의 경우 추가 class*/
.popup.open {display: block !important;} .popup.open {display: block !important;}

View File

@@ -49,4 +49,4 @@ function userInfoToggle(){
else{ else{
userBtn.classList.add(click); userBtn.classList.add(click);
} }
} }

View File

@@ -1,7 +1,4 @@
import axios from 'axios'; import axios from 'axios';
import { testProp } from './config';
import tokenSvc from '@/common/token-service';
import { consts } from './config';
const config = { const config = {
//baseURL: 'http://localhost:7070', //baseURL: 'http://localhost:7070',
@@ -29,19 +26,12 @@ const authInterceptor = config => {
}; };
const tokenInterceptor = config => { const tokenInterceptor = config => {
// var authToken = tokenSvc.getAuthToken();
// console.log(this.$store);
// alert('tokenInterceptor'+authToken);
// if(tokenSvc.getAuthorization(consts.tokenPart1) != null){
// //config.headers.Authorization = tokenSvc.getAuthorization(consts.tokenPart1);
// //console.log("getToken : "+config.headers.Authorization);
// //config.headers.Authorization = tokenSvc.getToken();
// }
// console.log('http : ',sessionStorage.authToken); // console.log('http : ',sessionStorage.authToken);
if(sessionStorage.authToken != null) { if(sessionStorage.authToken != null) {
config.headers.Authorization = 'Bearer '+ sessionStorage.authToken; config.headers.Authorization = 'Bearer '+ sessionStorage.authToken;
}else if(sessionStorage.authToken == null && sessionStorage.refreshToken != null){
config.headers.Authorization = 'Bearer '+ sessionStorage.refreshToken;
} }
return config; return config;
@@ -59,22 +49,6 @@ const loadingLayer = (type, config) => {
get: httpClient.get(url, { params: { ... }, headers: {"show-layer": "Yes"} }) // in 2nd property get: httpClient.get(url, { params: { ... }, headers: {"show-layer": "Yes"} }) // in 2nd property
post: httpClient.post(url, params, { headers: {"show-layer": "Yes"} }) // 3rd property post: httpClient.post(url, params, { headers: {"show-layer": "Yes"} }) // 3rd property
*/ */
// if (config.headers['Show-Layer'] == 'Yes') {
// if (type) {
// loadOverlap.push('add');
// } else {
// loadOverlap.pop();
// }
// if (loadOverlap.length > 0) {
// document.querySelector('html > body').style.overflow = 'hidden'; // 스크롤 block
// document.getElementsByClassName('loading_layer')[0].style.display = 'block';
// } else {
// document.querySelector('html > body').style.removeProperty('overflow'); // 스크롤 allow
// document.getElementsByClassName('loading_layer')[0].style.display = 'none';
// }
// }
if(type){ if(type){
document.querySelector('html > body').style.overflow = 'hidden'; // 스크롤 block document.querySelector('html > body').style.overflow = 'hidden'; // 스크롤 block
document.getElementsByClassName('loadingDimmed')[0].style.display = 'block'; document.getElementsByClassName('loadingDimmed')[0].style.display = 'block';
@@ -107,17 +81,27 @@ httpClient.interceptors.request.use(loadingLayerInterceptor);
/** Adding the response interceptors */ /** Adding the response interceptors */
httpClient.interceptors.response.use( httpClient.interceptors.response.use(
response => { response => {
loadingLayer(false, response.config); loadingLayer(false, response.config);
console.log('response status:', response.status, 'data:', response.data); console.log('response status:', response.status, 'data:', response.data);
console.log('response config url :',response.config.url);
if(response.config.url == '/api/v1/bo/comm/refreshToken'){
if(response.data.data != null && typeof response.data.data != undefined){
sessionStorage.setItem('authToken', response.data.data);
window.location.reload();
}else{
delete sessionStorage.authToken;
window.top.location.href = '/login';
}
}
return response; return response;
}, },
error => { error => {
console.log(error); console.log(error);
//alert(error); //alert(error);
delete sessionStorage.authToken;
if(error.message === 'Network Error'){ if(error.message === 'Network Error'){
alert('네트워크 오류가 발생했습니다. 잠시 후 다시 시도해주세요.'); alert('네트워크 오류가 발생했습니다. 잠시 후 다시 시도해주세요.');
// tokenSvc.removeToken(); delete sessionStorage.authToken;
window.top.location.href = '/login'; window.top.location.href = '/login';
} }
if (error.response != undefined && error.response != null) loadingLayer(false, error.response.config); if (error.response != undefined && error.response != null) loadingLayer(false, error.response.config);
@@ -126,33 +110,31 @@ httpClient.interceptors.response.use(
if (error.code === 'ECONNABORTED') { if (error.code === 'ECONNABORTED') {
alert('서비스가 지연되고 있습니다. 잠시 후 확인하시고 다시 시도해주세요.'); alert('서비스가 지연되고 있습니다. 잠시 후 확인하시고 다시 시도해주세요.');
return Promise.reject(error); return Promise.reject(error);
}else if(error.response.status == 401){ }else if(error.response.status == 401){
alert('세션이 만료되었습니다.'); alert('세션이 만료되었습니다.');
// tokenSvc.removeToken(); delete sessionStorage.authToken;
window.top.location.href = '/login'; window.top.location.href = '/login';
} else if (error.response.status == 418) { } else if (error.response.status == 418) {
// tokenSvc.removeToken(); delete sessionStorage.authToken;
alert('세션이 만료되었습니다.'); if(error.config.url == '/api/v1/bo/comm/refreshToken'){
window.top.location.href = '/login'; alert('세션이 만료되었습니다.');
}else if (error.response.status == 500) { delete sessionStorage.authToken;
if (error.response.data != null && error.response.data.message == '511 NETWORK_AUTHENTICATION_REQUIRED') { delete sessionStorage.refreshToken;
alert('웹템플릿 IP가 브랜드포털에 등록이 필요합니다. 기술지원에 문의해주세요.'); return window.top.location.href = '/login';
return Promise.reject(error); //return Promise.reject(error);
} else {
// tokenSvc.removeToken();
window.top.location.href = '/login';
} }
} else if (error.response.status == 511) { var params = {};
alert('웹템플릿 IP가 브랜드포털에 등록이 필요합니다. 기술지원에 문의해주세요.'); httpClient.post('/api/v1/bo/comm/refreshToken',params);
return Promise.reject(error); }else if (error.response.status == 500) {
} window.top.location.href = '/view/error/500';
}
// else if (error.message == 'Network Error') { // else if (error.message == 'Network Error') {
// alert('네트워크 오류가 발생했습니다. 잠시 후 다시 시도해주세요.'); // alert('네트워크 오류가 발생했습니다. 잠시 후 다시 시도해주세요.');
// return Promise.reject(error); // return Promise.reject(error);
// } // }
else { else {
// alert("else"); delete sessionStorage.authToken;
console.log('response error:', error); console.log('response error:', error);
return Promise.reject(error); return Promise.reject(error);
} }
} }

View File

@@ -179,11 +179,16 @@ export default {
this.$refs.madangId.focus(); this.$refs.madangId.focus();
} }
}, },
setAuthData() { async setAuthData() {
// 권한 옵션. // 권한 옵션.
api.commAuth().then(response => { try {
this.authType = response.data.data.list; const response = await api.commAuth();
}); if(response.data.retCode == '0000'){
this.authType = response.data.data.list;
}
}catch(err){
}
}, },
formReset(){ formReset(){
Object.assign(this.$data, this.$options.data()); Object.assign(this.$data, this.$options.data());

View File

@@ -158,11 +158,19 @@ export default {
this.memberInsertModalClose(); this.memberInsertModalClose();
this.$parent.memberDetail(this.adminId); this.$parent.memberDetail(this.adminId);
}, },
setAuthData() { async setAuthData() {
// 권한 옵션. // 권한 옵션.
api.commAuth().then(response => { // api.commAuth().then(response => {
this.authType = response.data.data.list; // this.authType = response.data.data.list;
}); // });
try {
const response = await api.commAuth();
if(response.data.retCode == '0000'){
this.authType = response.data.data.list;
}
}catch(err){
}
}, },
formReset() { formReset() {
var targetAdminId = this.adminId; var targetAdminId = this.adminId;

View File

@@ -7,7 +7,7 @@
</div> </div>
<div class="table table_form"> <div class="table table_form">
<form action="" target="_blank" method="post" ref="form"> <form action="" target="_blank" method="post" ref="form" onSubmit="return false;">
<input type="hidden" name="svcUserId" id="svcUserId" v-model="svcUserId" /> <input type="hidden" name="svcUserId" id="svcUserId" v-model="svcUserId" />
<input type="hidden" name="ezSvcUserAuthKey" id="ezSvcUserAuthKey" v-model="ezSvcUserAuthKey" /> <input type="hidden" name="ezSvcUserAuthKey" id="ezSvcUserAuthKey" v-model="ezSvcUserAuthKey" />
</form> </form>
@@ -236,6 +236,7 @@ export default {
homePageUrl: '', homePageUrl: '',
isActive: true, isActive: true,
//applyTbStyle: 'cursor: default;', //applyTbStyle: 'cursor: default;',
oldMemo: '',
}; };
}, },
props: { props: {
@@ -322,6 +323,7 @@ export default {
} }
this.lastLoginDt = result.data.lastLoginDt; this.lastLoginDt = result.data.lastLoginDt;
this.memo = result.data.memo; this.memo = result.data.memo;
this.oldMemo = result.data.memo;
this.mdn = result.data.mdn; this.mdn = result.data.mdn;
this.email = result.data.email; this.email = result.data.email;
this.list = result.data.list; this.list = result.data.list;
@@ -336,14 +338,18 @@ export default {
this.$refs.commmonModal.alertModalOpen(this.row); this.$refs.commmonModal.alertModalOpen(this.row);
} }
}, },
/** 저장 */
async updateAdminInfoTotal() { async updateAdminInfoTotal() {
this.row = {}; this.row = {};
this.row.userId = this.adminId; this.row.userId = this.adminId;
this.row.sendingLimit = this.sendingLimit; this.row.sendingLimit = this.sendingLimit;
this.row.lineType = this.lineType; this.row.lineType = this.lineType;
this.row.userStat = this.userStat; this.row.userStat = this.userStat;
this.row.memo = this.memo; if(this.memo != this.oldMemo){
this.row.memo = this.memo;
} else {
this.row.memo = '';
}
try { try {
const response = await custMgtApi.updateAdminInfoTotal(this.row); const response = await custMgtApi.updateAdminInfoTotal(this.row);
const result = response.data; const result = response.data;
@@ -371,6 +377,7 @@ export default {
toComplete() { toComplete() {
this.$router.push({ name: 'memberList', params: this.row }); this.$router.push({ name: 'memberList', params: this.row });
}, },
excelPopOpen() { excelPopOpen() {
if (this.userTotalCnt >= 100) { if (this.userTotalCnt >= 100) {
// 사용자등록제한_최대100개까지 // 사용자등록제한_최대100개까지
@@ -431,11 +438,19 @@ export default {
this.$refs.commmonModal.alertModalOpen(this.row); this.$refs.commmonModal.alertModalOpen(this.row);
} }
}, },
setAuthData() { async setAuthData() {
// 권한 옵션. // 권한 옵션.
api.commAuth().then((response) => { // api.commAuth().then((response) => {
this.authType = response.data.data.list; // this.authType = response.data.data.list;
}); // });
try {
const response = await api.commAuth();
if(response.data.retCode == '0000'){
this.authType = response.data.data.list;
}
}catch(err){
}
}, },
formReset() { formReset() {
Object.assign(this.$data, this.$options.data()); Object.assign(this.$data, this.$options.data());

View File

@@ -270,7 +270,8 @@ export default {
}, },
async subsDetail(serviceId) { async subsDetail(serviceId) {
this.row.serviceId = serviceId; this.row.serviceId = serviceId;
try {
try {
const response = await custMgtApi.subsDetail(this.row); const response = await custMgtApi.subsDetail(this.row);
const result = response.data; const result = response.data;
if (result != null && result.retCode == "0000") { if (result != null && result.retCode == "0000") {

View File

@@ -327,6 +327,7 @@ export default {
vm.$store.commit("login/saveAuthToken", rsp.data.authToken); vm.$store.commit("login/saveAuthToken", rsp.data.authToken);
//localStorage.authToken = rsp.data.authToken; //localStorage.authToken = rsp.data.authToken;
sessionStorage.setItem('authToken', rsp.data.authToken); sessionStorage.setItem('authToken', rsp.data.authToken);
sessionStorage.setItem('refreshToken', rsp.data.refreshToken);
//api.setToken(rsp.data.authToken); //api.setToken(rsp.data.authToken);
vm.$router.push({ path: rootUrl}); vm.$router.push({ path: rootUrl});
}else if (rsp.retCode == '4008'){ }else if (rsp.retCode == '4008'){

View File

@@ -257,11 +257,19 @@ export default {
} }
} }
}, },
setAuthData() { async setAuthData() {
// 권한 옵션. // 권한 옵션.
api.commAuth().then(response => { // api.commAuth().then(response => {
this.authType = response.data.data.list; // this.authType = response.data.data.list;
}); // });
try {
const response = await api.commAuth();
if(response.data.retCode == '0000'){
this.authType = response.data.data.list;
}
}catch(err){
}
}, },
formReset() { formReset() {
var type = this.insertType; var type = this.insertType;

View File

@@ -365,11 +365,19 @@ export default {
} }
} }
}, },
setAuthData() { async setAuthData() {
// 권한 옵션. // 권한 옵션.
api.commAuth().then(response => { // api.commAuth().then(response => {
this.authType = response.data.data.list; // this.authType = response.data.data.list;
}); // });
try {
const response = await api.commAuth();
if(response.data.retCode == '0000'){
this.authType = response.data.data.list;
}
}catch(err){
}
}, },
formReset() { formReset() {
var type = this.insertType; var type = this.insertType;

View File

@@ -223,15 +223,23 @@ export default {
const getCondition = this.$store.getters['searchcondition/getSearchCondition']; const getCondition = this.$store.getters['searchcondition/getSearchCondition'];
}, },
setCodeData() { async setCodeData() {
// 상태 옵션 셋팅. // 상태 옵션 셋팅.
api.commCode({'grpCd': 'ADM_STTUS_CD'}).then(response => { api.commCode({'grpCd': 'ADM_STTUS_CD'}).then(response => {
this.statType = response.data.data.list; this.statType = response.data.dat.a.list;
});
api.commAuth().then(response => {
this.authType = response.data.data.list;
}); });
// api.commAuth().then(response => {
// this.authType = response.data.data.list;
// });
try {
const response = await api.commAuth();
if(response.data.retCode == '0000'){
this.authType = response.data.datalist;
}
}catch(err){
}
}, },
rowDelete() { rowDelete() {
if (this.doValidate()) { if (this.doValidate()) {

View File

@@ -92,9 +92,9 @@ export default {
this.$refs.commmonModal.alertModalOpen(this.row); this.$refs.commmonModal.alertModalOpen(this.row);
} }
} catch (err) { } catch (err) {
this.row.title = '권한 관리'; // this.row.title = '권한 관리';
this.row.msg1 = '실패 하였습니다.' // this.row.msg1 = '실패 하였습니다.'
this.$refs.commmonModal.alertModalOpen(this.row); // this.$refs.commmonModal.alertModalOpen(this.row);
} }
}, },
insertAuth() { insertAuth() {
@@ -128,10 +128,10 @@ export default {
this.$refs.commmonModal.alertModalOpen(this.row); this.$refs.commmonModal.alertModalOpen(this.row);
} }
} catch (err) { } catch (err) {
this.row = {} // this.row = {}
this.row.title = '권한 관리'; // this.row.title = '권한 관리';
this.row.msg1 = '실패 하였습니다.'; // this.row.msg1 = '실패 하였습니다.';
this.$refs.commmonModal.alertModalOpen(this.row); // this.$refs.commmonModal.alertModalOpen(this.row);
} }
}, },
confirmCalbackFnc(props) { confirmCalbackFnc(props) {

View File

@@ -67,7 +67,7 @@ const router = new Router({
router.beforeEach((to, from, next) => { router.beforeEach((to, from, next) => {
const isPublic = to.matched.some(record => record.meta.public); const isPublic = to.matched.some(record => record.meta.public);
const loggedIn = !!tokenSvc.getToken(); const loggedIn = !!tokenSvc.getToken();
if (!isPublic && !loggedIn) { if (!isPublic && !loggedIn) {
return next('/login'); return next('/login');
}else{ }else{
var nextUrl = to.fullPath; var nextUrl = to.fullPath;

View File

@@ -10,6 +10,8 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import kr.co.uplus.ez.api.comm.dto.Auth; import kr.co.uplus.ez.api.comm.dto.Auth;
@@ -24,6 +26,7 @@ import kr.co.uplus.ez.api.comm.dto.MenuResDto;
import kr.co.uplus.ez.api.comm.dto.RefreshTokenReqDto; import kr.co.uplus.ez.api.comm.dto.RefreshTokenReqDto;
import kr.co.uplus.ez.api.comm.dto.RefreshTokenResDto; import kr.co.uplus.ez.api.comm.dto.RefreshTokenResDto;
import kr.co.uplus.ez.common.data.ApiResponseCode; import kr.co.uplus.ez.common.data.ApiResponseCode;
import kr.co.uplus.ez.common.jwt.JwtService;
import kr.co.uplus.ez.common.utils.SpringUtils; import kr.co.uplus.ez.common.utils.SpringUtils;
@Service @Service
@@ -39,6 +42,9 @@ public class CommService {
@Qualifier("sqlSessionTemplateDb2") @Qualifier("sqlSessionTemplateDb2")
private SqlSessionTemplate sqlSessionSlave; private SqlSessionTemplate sqlSessionSlave;
@Autowired
private JwtService jwtSvc;
/** /**
* date : 2022. 4. 26. * date : 2022. 4. 26.
* auth : ckr * auth : ckr
@@ -106,16 +112,15 @@ public class CommService {
* @return RefreshTokenResDto * @return RefreshTokenResDto
*/ */
public RefreshTokenResDto refreshToken(RefreshTokenReqDto refreshTokenReqDto) { public RefreshTokenResDto refreshToken(RefreshTokenReqDto refreshTokenReqDto) {
// 1. AuthToken 생성.
// 1. 리프레시 토큰 조회. Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if(auth != null) {
// 2. AuthToken 생성. String authToken = jwtSvc.generatePrivateToken(auth);
// 2. 응답.
// 3. 응답. return new RefreshTokenResDto(ApiResponseCode.SUCCESS, authToken);
}
// 2. 응답.
RefreshTokenResDto result = new RefreshTokenResDto(ApiResponseCode.SUCCESS, null);
RefreshTokenResDto result = new RefreshTokenResDto(ApiResponseCode.SUCCESS);
return result; return result;
} }

View File

@@ -12,7 +12,7 @@ import lombok.Data;
public class RefreshTokenResDto extends ResponseMessage implements Serializable{ public class RefreshTokenResDto extends ResponseMessage implements Serializable{
@ApiModelProperty(example = "데이터") @ApiModelProperty(example = "데이터")
private RefreshToken data; private String data;
public RefreshTokenResDto() { public RefreshTokenResDto() {
this.retCode = ApiResponseCode.SUCCESS.getResultCode(); this.retCode = ApiResponseCode.SUCCESS.getResultCode();
@@ -24,7 +24,7 @@ public class RefreshTokenResDto extends ResponseMessage implements Serializable{
this.retMsg = returnStr.getResultMsg(); this.retMsg = returnStr.getResultMsg();
} }
public RefreshTokenResDto(ApiResponseCode returnStr, RefreshToken data) { public RefreshTokenResDto(ApiResponseCode returnStr, String data) {
this.retCode = returnStr.getResultCode(); this.retCode = returnStr.getResultCode();
this.retMsg = returnStr.getResultMsg(); this.retMsg = returnStr.getResultMsg();
this.data = data; this.data = data;

View File

@@ -921,7 +921,9 @@ public class CustMgtService {
custMgtMapper.updateAdminInfoTotal(updateAdminInfoTotalReqDto); custMgtMapper.updateAdminInfoTotal(updateAdminInfoTotalReqDto);
// 2. 메모정보 insert // 2. 메모정보 insert
custMgtMapper.insertMemo(updateAdminInfoTotalReqDto); if(StringUtils.isNotEmpty(updateAdminInfoTotalReqDto.getMemo())) {
custMgtMapper.insertMemo(updateAdminInfoTotalReqDto);
}
// 3. 발송 한도 update // 3. 발송 한도 update
if (updateAdminInfoTotalReqDto.getSendingLimit() != null) { if (updateAdminInfoTotalReqDto.getSendingLimit() != null) {

View File

@@ -144,8 +144,9 @@ public class LoginController {
loginSuccessHandler.process(request, response, authentication); loginSuccessHandler.process(request, response, authentication);
// Auth 토큰 생성 // Auth 토큰 생성
String authToken = jwtSvc.generatePrivateToken(response, authentication); String authToken = jwtSvc.generatePrivateToken(authentication);
// jwtSvc.generatePrivateToken(response, authentication); // Create RefreshToken
String refreshToken = jwtSvc.refreshToken(authentication);
String nextUrl = getReturnUrl(request, response); String nextUrl = getReturnUrl(request, response);
logger.debug("login SUCCESS - nextUrl = [{}]", nextUrl); logger.debug("login SUCCESS - nextUrl = [{}]", nextUrl);
@@ -169,8 +170,6 @@ public class LoginController {
menuUrls.add(menuUrl); menuUrls.add(menuUrl);
} }
} }
//String menuUrl = rootMenu.getChildren().get(j).getMenuUrl();
// menuUrls.add(menuUrl);
} }
LoginRes loginRes = new LoginRes(rootUrl); LoginRes loginRes = new LoginRes(rootUrl);
@@ -178,6 +177,7 @@ public class LoginController {
loginRes.setUserNm(authUser.getOprtrNm()); loginRes.setUserNm(authUser.getOprtrNm());
loginRes.setMenuUrls(menuUrls); loginRes.setMenuUrls(menuUrls);
loginRes.setAuthToken(authToken); loginRes.setAuthToken(authToken);
loginRes.setRefreshToken(refreshToken);
ChkAuthNumResDto result = new ChkAuthNumResDto(ApiResponseCode.SUCCESS, loginRes); ChkAuthNumResDto result = new ChkAuthNumResDto(ApiResponseCode.SUCCESS, loginRes);
return result; return result;
@@ -192,8 +192,9 @@ public class LoginController {
rCode = loginSuccessHandler.process(request, response, authentication); rCode = loginSuccessHandler.process(request, response, authentication);
// loginToken // loginToken
String authToken = jwtSvc.generatePrivateToken(response, authentication); String authToken = jwtSvc.generatePrivateToken(authentication);
// jwtSvc.generatePrivateToken(response, authentication); // Create RefreshToken
String refreshToken = jwtSvc.refreshToken(authentication);
String nextUrl = getReturnUrl(request, response); String nextUrl = getReturnUrl(request, response);
logger.debug("login SUCCESS - nextUrl = [{}]", nextUrl); logger.debug("login SUCCESS - nextUrl = [{}]", nextUrl);
@@ -224,6 +225,8 @@ public class LoginController {
loginRes.setUserId(authUser.getOprtrId()); loginRes.setUserId(authUser.getOprtrId());
loginRes.setUserNm(authUser.getOprtrNm()); loginRes.setUserNm(authUser.getOprtrNm());
loginRes.setAuthToken(authToken); loginRes.setAuthToken(authToken);
loginRes.setRefreshToken(refreshToken);
loginRes.setMenuUrls(menuUrls); loginRes.setMenuUrls(menuUrls);
ChkAuthNumResDto result = new ChkAuthNumResDto(rCode, loginRes); ChkAuthNumResDto result = new ChkAuthNumResDto(rCode, loginRes);

View File

@@ -20,9 +20,15 @@ public class LoginRes implements Serializable {
private String userNm; private String userNm;
/** 접근 토큰*/ /** 접근 토큰*/
@ApiModelProperty(hidden = true)
private String accessToken; private String accessToken;
/** 권한 토큰*/ /** 권한 토큰*/
private String authToken; @ApiModelProperty(hidden = true)
private String authToken;
/** 리프레쉬 토큰*/
@ApiModelProperty(hidden = true)
private String refreshToken;
/** 메뉴 url*/ /** 메뉴 url*/
private ArrayList<String> menuUrls; private ArrayList<String> menuUrls;

View File

@@ -11,6 +11,9 @@ import io.swagger.annotations.ApiResponses;
import kr.co.uplus.ez.api.sysMgt.dto.*; import kr.co.uplus.ez.api.sysMgt.dto.*;
import kr.co.uplus.ez.common.components.ValidComponents; import kr.co.uplus.ez.common.components.ValidComponents;
import kr.co.uplus.ez.common.data.ApiResponseCode; import kr.co.uplus.ez.common.data.ApiResponseCode;
import org.apache.http.HttpStatus;
import org.apache.http.protocol.HTTP;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -51,12 +54,12 @@ public class SysMgtController {
@ApiResponses({ @ApiResponse(code = HttpServletResponse.SC_OK, message = "SUCESS") }) @ApiResponses({ @ApiResponse(code = HttpServletResponse.SC_OK, message = "SUCESS") })
@RequestMapping(value = "adminList", method = { RequestMethod.POST }) @RequestMapping(value = "adminList", method = { RequestMethod.POST })
@ResponseBody @ResponseBody
public AdminListResDto adminList(@RequestBody @Valid AdminListReqDto adminListReqDto, BindingResult bindingResult) { public AdminListResDto adminList(@RequestBody @Valid AdminListReqDto adminListReqDto, BindingResult bindingResult, HttpServletResponse response) {
if (validComponents.validParameter(bindingResult)) { if (validComponents.validParameter(bindingResult)) {
return new AdminListResDto(ApiResponseCode.CM_PARAMETER_ERROR); return new AdminListResDto(ApiResponseCode.CM_PARAMETER_ERROR);
} }
return sysService.adminList(adminListReqDto); return sysService.adminList(adminListReqDto);
} }

View File

@@ -35,7 +35,7 @@ public class JwtService {
@Qualifier("sqlSessionTemplateDb2") @Qualifier("sqlSessionTemplateDb2")
private SqlSessionTemplate sqlSessionSlave; private SqlSessionTemplate sqlSessionSlave;
public String generatePrivateToken(HttpServletResponse response, Authentication auth) { public String generatePrivateToken(Authentication auth) {
Claims claims = coreClaims(auth, jwtProps.getPrivateTokenExpiration()); Claims claims = coreClaims(auth, jwtProps.getPrivateTokenExpiration());
// 필요하면 다른 정보 추가 // 필요하면 다른 정보 추가
@@ -179,7 +179,7 @@ public class JwtService {
return generateToken(claims); return generateToken(claims);
} }
private String refreshToken(Authentication auth) { public String refreshToken(Authentication auth) {
Claims claims = coreClaims(auth, jwtProps.getRefreshTokenExpiration()); Claims claims = coreClaims(auth, jwtProps.getRefreshTokenExpiration());
return generateToken(claims); return generateToken(claims);
} }

View File

@@ -57,7 +57,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
"/v3/api-docs", "/v3/api-docs",
"/v3/api-docs/**", "/v3/api-docs/**",
"/", "/",
"/socket/**" "/socket/**",
"/api/v1/bo/sendNumMgt/filedownload"
}; };
private static final String[] AUTH_URL_ARRAY = { private static final String[] AUTH_URL_ARRAY = {

View File

@@ -23,8 +23,8 @@ app.props:
private-token-expiration: 1800 private-token-expiration: 1800
part1: JwtPart1 part1: JwtPart1
part2: JwtPart2 part2: JwtPart2
access-token-expiration: 180 access-token-expiration: 600
refresh-token-expiration: 1800 refresh-token-expiration: 5400
header: Authorization header: Authorization
prefix: "Bearer " prefix: "Bearer "

View File

@@ -28,10 +28,10 @@ See here for more details: http://gordondickens.com/wordpress/2013/03/27/sawing-
</encoder> </encoder>
</appender> </appender>
<logger name="org.springframework" level="info"/> <logger name="org.springframework" level="off"/>
<logger name="org.springframework.security" level="info"/> <logger name="org.springframework.security" level="off"/>
<logger name="org.springframework.boot" level="info"/> <logger name="org.springframework.boot" level="off"/>
<logger name="com.zaxxer.hikari.HikariConfig" level="info"/> <logger name="com.zaxxer.hikari.HikariConfig" level="off"/>
<logger name="reactor.netty" level="info" /> <logger name="reactor.netty" level="info" />
<logger name="io.lettuce.core" level="info" /> <logger name="io.lettuce.core" level="info" />
<logger name="org.thymeleaf" level="info"/> <logger name="org.thymeleaf" level="info"/>
@@ -51,7 +51,6 @@ See here for more details: http://gordondickens.com/wordpress/2013/03/27/sawing-
<logger name="jdbc.resultset" level="OFF" /> <logger name="jdbc.resultset" level="OFF" />
<logger name="jdbc.resultsettable" level="DEBUG" /> <logger name="jdbc.resultsettable" level="DEBUG" />
<logger name="jdbc.connection" level="OFF" /> <logger name="jdbc.connection" level="OFF" />
<logger name="org.mongodb.driver" level="OFF"/>
<springProfile name="local,dev"> <springProfile name="local,dev">
@@ -61,7 +60,7 @@ See here for more details: http://gordondickens.com/wordpress/2013/03/27/sawing-
</root> </root>
</springProfile> </springProfile>
<springProfile name="stg,prd"> <springProfile name="stg,prd">
<root level="info"> <root level="debug">
<appender-ref ref="console"/> <appender-ref ref="console"/>
<appender-ref ref="FILE"/> <appender-ref ref="FILE"/>
</root> </root>