diff --git a/frontend/src/assets/css/style.css b/frontend/src/assets/css/style.css
index a1cc407..5bcd107 100644
--- a/frontend/src/assets/css/style.css
+++ b/frontend/src/assets/css/style.css
@@ -1806,4 +1806,85 @@ textarea:focus{
.datepicker .datepicker-calender .click a, .datepicker .datepicker-calender .today a{color: #fff;}
.datepicker .datepicker-calender .disabled a{color:#c9c9c9 !important;}
-/*# sourceMappingURL=style.css.map */
\ No newline at end of file
+/*# sourceMappingURL=style.css.map */
+
+/* loadingPage */
+.loadingDimmed {
+ width: 100vw;
+ height: 100vh;
+ position: fixed;
+ top: 0;
+ left: 0;
+ background: rgba(0, 0, 0, 0.2);
+ z-index: 400;
+}
+.sp-3balls,
+.sp-3balls:before,
+.sp-3balls:after {
+ display: inline-block;
+ width: 18px;
+ height: 18px;
+ background: #946dc2;
+ border-radius: 100%;
+}
+.sp-3balls {
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ z-index: 1000;
+ opacity: 1;
+ animation: spScaleAlpha 2s infinite linear;
+}
+.sp-3balls:before,
+.sp-3balls:after {
+ content: "";
+ position: absolute;
+ opacity: 0.25;
+}
+.sp-3balls:before {
+ right: 30px;
+ animation: spScaleAlphaBefore 2s infinite linear;
+}
+.sp-3balls:after {
+ left: 30px;
+ animation: spScaleAlphaAfter 2s infinite linear;
+}
+
+@keyframes spScaleAlpha {
+ 0% {
+ opacity: 1;
+ }
+ 33% {
+ opacity: 0.25;
+ }
+ 66% {
+ opacity: 0.25;
+ }
+ 100% {
+ opacity: 1;
+ }
+}
+
+@keyframes spScaleAlphaBefore {
+ 33% {
+ opacity: 0.25;
+ }
+ 66% {
+ opacity: 1;
+ }
+ 100% {
+ opacity: 0.25;
+ }
+}
+@keyframes spScaleAlphaAfter {
+ 0% {
+ opacity: 0.25;
+ }
+ 33% {
+ opacity: 1;
+ }
+ 66% {
+ opacity: 0.25;
+ }
+}
\ No newline at end of file
diff --git a/frontend/src/common/config.js b/frontend/src/common/config.js
index da36c93..d812e25 100644
--- a/frontend/src/common/config.js
+++ b/frontend/src/common/config.js
@@ -7,7 +7,8 @@ const consts = {
tokenPart1: 'JwtPart1',
tokenPart2: 'JwtPart2',
tokenPart3: 'JwtPart3',
- tokenPart4: 'JwtPart4'
+ tokenPart4: 'JwtPart4',
+ authToken: null
}
export { environment, testProp, consts };
diff --git a/frontend/src/common/http-client.js b/frontend/src/common/http-client.js
index 99f214d..e661b66 100644
--- a/frontend/src/common/http-client.js
+++ b/frontend/src/common/http-client.js
@@ -20,7 +20,8 @@ const authInterceptor = config => {
// cookie, header 등에 자격정보 설정이 필요한 api는 true 설정으로 호출해야 하고
// 자격정보 설정이 필요없는 api는 withCredentials=false 설정으로 호출해야 한다.
// config.withCredentials = !config.url.startsWith('/api/public/');
- console.log("Test Url : "+ config.url);
+ // console.log("Test Url : "+ config.url);
+
/*if(config.url == '/api/auth/login'){
config.baseURL = "http://localhost:3000";
}*/
@@ -28,17 +29,27 @@ const authInterceptor = config => {
};
const tokenInterceptor = config => {
- if(tokenSvc.getAuthorization(consts.tokenPart1) != null){
- config.headers.Authorization = tokenSvc.getAuthorization(consts.tokenPart1);
- //console.log("getToken : "+config.headers.Authorization);
- //config.headers.Authorization = tokenSvc.getToken();
+ // 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);
+ if(sessionStorage.authToken != null) {
+ config.headers.Authorization = 'Bearer '+ sessionStorage.authToken;
}
+
return config;
}
const loggerInterceptor = config => {
//console.log('testProp:', testProp);
- //console.log('request url:', config.url, 'params:', config.data);
+ console.log('request url:', config.url, 'params:', config.data, 'config: ', config);
return config;
};
@@ -48,46 +59,65 @@ const loadingLayer = (type, config) => {
get: httpClient.get(url, { params: { ... }, headers: {"show-layer": "Yes"} }) // in 2nd 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 (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 (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){
+ document.querySelector('html > body').style.overflow = 'hidden'; // 스크롤 block
+ document.getElementsByClassName('loadingDimmed')[0].style.display = 'block';
+ document.getElementsByClassName('sp-3balls')[0].style.display = 'block';
+ }else{
+ document.querySelector('html > body').style.removeProperty('overflow'); // 스크롤 allow
+ document.getElementsByClassName('loadingDimmed')[0].style.display = 'none';
+ document.getElementsByClassName('sp-3balls')[0].style.display = 'none';
}
};
-/*const loadingLayerInterceptor = config => {
+const urlInterceptor = config => {
+ if(sessionStorage.fromUrl != null){
+ config.params.fromUrl = sessionStorage.fromUrl;
+ }
+ return config;
+}
+const loadingLayerInterceptor = config => {
loadingLayer(true, config);
return config;
-};*/
+};
/** Adding the request interceptors */
httpClient.interceptors.request.use(authInterceptor);
httpClient.interceptors.request.use(tokenInterceptor);
+httpClient.interceptors.request.use(urlInterceptor);
httpClient.interceptors.request.use(loggerInterceptor);
-//httpClient.interceptors.request.use(loadingLayerInterceptor);
+httpClient.interceptors.request.use(loadingLayerInterceptor);
/** Adding the response interceptors */
httpClient.interceptors.response.use(
response => {
- //loadingLayer(false, response.config);
+ loadingLayer(false, response.config);
console.log('response status:', response.status, 'data:', response.data);
return response;
},
error => {
console.log(error);
+ //alert(error);
+ delete sessionStorage.authToken;
if(error.message === 'Network Error'){
alert('네트워크 오류가 발생했습니다. 잠시 후 다시 시도해주세요.');
- tokenSvc.removeToken();
+ // tokenSvc.removeToken();
window.top.location.href = '/login';
}
if (error.response != undefined && error.response != null) loadingLayer(false, error.response.config);
@@ -98,17 +128,18 @@ httpClient.interceptors.response.use(
return Promise.reject(error);
}else if(error.response.status == 401){
alert('세션이 만료되었습니다.');
- tokenSvc.removeToken();
+ // tokenSvc.removeToken();
window.top.location.href = '/login';
} else if (error.response.status == 418) {
- tokenSvc.removeToken();
+ // tokenSvc.removeToken();
+ alert('세션이 만료되었습니다.');
window.top.location.href = '/login';
}else if (error.response.status == 500) {
if (error.response.data != null && error.response.data.message == '511 NETWORK_AUTHENTICATION_REQUIRED') {
alert('웹템플릿 IP가 브랜드포털에 등록이 필요합니다. 기술지원에 문의해주세요.');
return Promise.reject(error);
} else {
- tokenSvc.removeToken();
+ // tokenSvc.removeToken();
window.top.location.href = '/login';
}
} else if (error.response.status == 511) {
@@ -120,7 +151,7 @@ httpClient.interceptors.response.use(
// return Promise.reject(error);
// }
else {
- alert("else");
+ // alert("else");
console.log('response error:', error);
return Promise.reject(error);
}
diff --git a/frontend/src/common/token-service.js b/frontend/src/common/token-service.js
index 6b2e604..f3d570e 100644
--- a/frontend/src/common/token-service.js
+++ b/frontend/src/common/token-service.js
@@ -1,53 +1,28 @@
import * as utils from './utils';
-import { consts } from './config';
-
-
-// const KEY_TOKEN = 'access_token';
const tokenSvc = {
getToken() {
- // return store.getters['login/getToken'];
- // var payload = sessionStorage.getItem(KEY_TOKEN);
- var jwtPart1 = utils.getCookie(consts.tokenPart1);
- if (!jwtPart1)
- return null;
- var payload = utils.base64decode(jwtPart1.split('.').pop());
- return JSON.parse(payload);
- },
- removeToken() {
- var tokenNm1 = consts.tokenPart1;
- var tokenNm2 = consts.tokenPart2;
- var tokenNm3 = consts.tokenPart3;
- var tokenNm4 = consts.tokenPart4;
-
- document.cookie = tokenNm1+'=; expires=Thu, 01 Jan 1970 00:00:01 GMT;';
- document.cookie = tokenNm2+'=; expires=Thu, 01 Jan 1970 00:00:01 GMT;';
- document.cookie = tokenNm3+'=; expires=Thu, 01 Jan 1970 00:00:01 GMT;';
- document.cookie = tokenNm4+'=; expires=Thu, 01 Jan 1970 00:00:01 GMT;';
- },
- getAuthorization(tokenKey){
- var jwtPart = utils.getCookie(tokenKey);
- if(!jwtPart){
+ var authToken = sessionStorage.getItem('authToken');
+ if(authToken == null){
return null;
}
- return jwtPart;
+
+ var tokenArr = authToken.split('.');
+
+ var jwtToken = utils.base64decode(tokenArr[1]);
+ return JSON.parse(jwtToken);
},
-
- // saveToken(jwtPart1) {
- // if (!jwtPart1)
- // return;
-
- // var payload = utils.base64decode(jwtPart1.split('.').pop());
- // console.log('save token:', payload);
- // // store.commit('login/saveToken', token);
- // sessionStorage.setItem(KEY_TOKEN, payload);
- // },
-
- // removeToken() {
- // // store.commit('login/removeToken');
- // sessionStorage.removeItem(KEY_TOKEN);
- // }
-
+ removeToken() {
+ delete sessionStorage.authToken;
+ },
+
+ setAuthToken(token){
+ sessionStorage.authToken = token;
+ },
+ getAuthToken(){
+ var authToken = sessionStorage.authToken;
+ return authToken;
+ }
};
export default tokenSvc;
diff --git a/frontend/src/common/vue-mixins.js b/frontend/src/common/vue-mixins.js
index 5425e79..7bc2b7a 100644
--- a/frontend/src/common/vue-mixins.js
+++ b/frontend/src/common/vue-mixins.js
@@ -46,7 +46,7 @@ const coreUiMixin = {
*/
openLayer: function(layerId) {
if (layerId == undefined || layerId == null || layerId == '') {
- alert('layerId를 설정해 주세요.');
+ // alert('layerId를 설정해 주세요.');
} else {
this.$emit('changeLayerId', layerId);
}
diff --git a/frontend/src/components/CustomGrid.vue b/frontend/src/components/CustomGrid.vue
index 5038abd..ddbe860 100644
--- a/frontend/src/components/CustomGrid.vue
+++ b/frontend/src/components/CustomGrid.vue
@@ -33,7 +33,8 @@ export default {
'addTableStyle', // 추가되는 그리드 style
'addTbCls', // 추가되는 테이블 클래스
'addCls', // 추가되는 클래스
- 'totalItems' // 부모창에 표시할 총 컨텐츠 개수 변수 명 (더 좋은 방법 있으면 알려주세요.)
+ 'totalItems', // 부모창에 표시할 총 컨텐츠 개수 변수 명 (더 좋은 방법 있으면 알려주세요.)
+ 'pageRange', // next or pre 이동할 페이지 단위
],
components: {
VRuntimeTemplate
@@ -57,11 +58,13 @@ export default {
colsData: '',
headerData: '',
bodyData: '',
- pagingData: ''
+ pagingData: '',
+ nextPageRange: 1
+
};
},
created() {
- this.cleanData();
+ this.cleanData();
if (this.initialRequest == true) {
this.readData();
}
@@ -105,6 +108,7 @@ export default {
this.headerData = '';
this.bodyData = '';
this.pagingData = '';
+ this.nextPageRange = 1;
},
readData(isKeep) {
if (typeof this.url != undefined && this.url != null && this.url != '') {
@@ -126,13 +130,11 @@ export default {
let pageStr = '';
var vm = this;
- console.log("grid url >> " + this.url);
httpClient
//.get(this.url, { params: this.getParams, headers: { 'Show-Layer': 'Yes' }})
.post(this.url, this.getParams, {headers: { 'Show-Layer': 'Yes' }})
.then(response => {
let resp = response.data;
- console.log(resp);
//if (resp != null && resp.result == true) {
if (resp != null && resp.retCode == '0000') {
let data = resp.data;
@@ -149,10 +151,13 @@ export default {
vm.totalCount = data.pagination.totalCount;
pageStr = vm.makePagingView();
}*/
- if (vm.pagination == true) {
+ if (vm.pagination == true) {
vm.currentIndex = data.paging.page == 0 ? 1 : data.paging.page;
vm.totalCount = data.paging.totalCnt;
pageStr = vm.makePagingView();
+ if(typeof this.pageRange != 'undefined'){
+ vm.nextPageRange = this.pageRange;
+ }
}
// 조회결과 없음.
}else if(resp != null && resp.retCode == '1004'){
@@ -536,55 +541,9 @@ export default {
str = '';
}
return str;
- },
- /*
+ },
+
makePagingView() {
- let pData = '
';
-
- let totalPage = Math.ceil(this.totalCount / this.curPerPage);
- if (totalPage < 1) {
- totalPage = 1;
- }
- let pageGroup = Math.ceil(this.currentIndex / this.pageCount);
-
- let last = pageGroup * this.pageCount;
- if (last > totalPage) {
- last = totalPage;
- }
-
- let first = last - (this.pageCount - 1);
- if (first < 1) {
- first = 1;
- }
- let prev = first - 1;
- if (prev < 1) {
- prev = 1;
- }
- let next = last + 1;
- if (next > totalPage) {
- next = totalPage;
- }
-
- pData += '
처음으로';
- pData += '
이전으로';
-
- for (var i = first; i <= last; i++) {
- let actCls = '';
- if (i == this.currentIndex) {
- actCls = "class='active'";
- }
- pData += '
' + i + '';
- }
-
- pData += '
다음으로';
- pData +=
- '
마지막으로';
-
- pData += '
';
- return pData;
- },
- */
- makePagingView() {
let pData = '
\ No newline at end of file
+
diff --git a/src/main/java/kr/co/uplus/ez/api/login/LoginController.java b/src/main/java/kr/co/uplus/ez/api/login/LoginController.java
index 904a904..eafc100 100644
--- a/src/main/java/kr/co/uplus/ez/api/login/LoginController.java
+++ b/src/main/java/kr/co/uplus/ez/api/login/LoginController.java
@@ -143,9 +143,10 @@ public class LoginController {
if (authNumDto.getOprtrId().contains(authenticationWithoutId.get(i).trim())) {
loginSuccessHandler.process(request, response, authentication);
- // access 토큰 생성
- jwtSvc.generatePrivateToken(response, authentication);
-
+ // Auth 토큰 생성
+ String authToken = jwtSvc.generatePrivateToken(response, authentication);
+// jwtSvc.generatePrivateToken(response, authentication);
+
String nextUrl = getReturnUrl(request, response);
logger.debug("login SUCCESS - nextUrl = [{}]", nextUrl);
AuthUser authUser = loginService.getUser(authentication.getName());
@@ -157,10 +158,27 @@ public class LoginController {
Menu rootMenu = menu.get(0);
String rootUrl = rootMenu.getChildren().get(0).getMenuUrl();
+ ArrayList menuUrls = new ArrayList();
+ for(int j=0; j< menu.size(); j++) {
+ Menu parentMenu = menu.get(j);
+ if(parentMenu.getChildren().size() > 0) {
+ ArrayList