diff --git a/src/main/java/com/palnet/biz/api/acnt/jwt/model/JwtGroupModel.java b/src/main/java/com/palnet/biz/api/acnt/jwt/model/JwtGroupModel.java new file mode 100644 index 0000000..cb5c5f7 --- /dev/null +++ b/src/main/java/com/palnet/biz/api/acnt/jwt/model/JwtGroupModel.java @@ -0,0 +1,9 @@ +package com.palnet.biz.api.acnt.jwt.model; + +import lombok.Data; + +@Data +public class JwtGroupModel { + private String groupId; + private String groupAuthCd; +} diff --git a/src/main/java/com/palnet/biz/api/acnt/jwt/model/JwtUserModel.java b/src/main/java/com/palnet/biz/api/acnt/jwt/model/JwtUserModel.java index 7b36a5c..570b4fd 100644 --- a/src/main/java/com/palnet/biz/api/acnt/jwt/model/JwtUserModel.java +++ b/src/main/java/com/palnet/biz/api/acnt/jwt/model/JwtUserModel.java @@ -1,13 +1,14 @@ package com.palnet.biz.api.acnt.jwt.model; -import lombok.*; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; import javax.persistence.*; -import java.util.Collection; -import java.util.HashSet; -import java.util.Set; +import java.util.*; @Entity @Data @@ -34,7 +35,9 @@ public class JwtUserModel implements UserDetails { @Column(name = "CSTMR_STATUS_CD") private String cstmrStatusCd; - + + @Transient + private List group; // 사용자의 권한을 콜렉션 형태로 반환 diff --git a/src/main/java/com/palnet/biz/api/acnt/jwt/utils/JwtTokenUtil.java b/src/main/java/com/palnet/biz/api/acnt/jwt/utils/JwtTokenUtil.java index e03e71f..7960620 100644 --- a/src/main/java/com/palnet/biz/api/acnt/jwt/utils/JwtTokenUtil.java +++ b/src/main/java/com/palnet/biz/api/acnt/jwt/utils/JwtTokenUtil.java @@ -1,21 +1,24 @@ package com.palnet.biz.api.acnt.jwt.utils; -import java.io.Serializable; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; -import java.util.function.Function; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.stereotype.Component; - +import com.palnet.biz.api.acnt.jwt.model.JwtGroupModel; import com.palnet.biz.api.acnt.jwt.model.JwtUserModel; - import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; +import java.io.Serializable; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Function; @Component @Log4j2 @@ -30,6 +33,8 @@ public class JwtTokenUtil implements Serializable { @Value("${spring.jwt.secret}") private String secret; + @Value("${spring.jwt.prefix}") + private String JWT_PREFIX; //retrieve username from jwt token // jwt token으로부터 username을 획득한다. @@ -66,6 +71,7 @@ public class JwtTokenUtil implements Serializable { Map claims = new HashMap<>(); claims.put("userId", userDetails.getUserId()); claims.put("cstmrSno", userDetails.getCstmrSno()); + claims.put("group", userDetails.getGroup()); return doGenerateToken(claims, userDetails.getUsername()); } @@ -101,4 +107,35 @@ public class JwtTokenUtil implements Serializable { final String username = getUsernameFromToken(token); return (username.equals(userDetails.getUsername()) && !isTokenExpired(token)); } + + public String getUserIdByToken() { + ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + HttpServletRequest rq = sra.getRequest(); + String token = rq.getHeader("Authorization"); + if(token == null || "".equals(token)) return null; + token = token.substring(JWT_PREFIX.length()).trim(); + String userId = getUsernameFromToken(token); + return userId; + } + public Integer getCstmrSnoByToken() { + ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + HttpServletRequest rq = sra.getRequest(); + String token = rq.getHeader("Authorization"); + if(token == null || "".equals(token)) return null; + token = token.substring(JWT_PREFIX.length()).trim(); + Claims payload = getAllClaimsFromToken(token); + Integer cstmrSno = payload.get("cstmrSno",Integer.class); + return cstmrSno; + } + + public List getGroupAuthByToken() { + ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + HttpServletRequest rq = sra.getRequest(); + String token = rq.getHeader("Authorization"); + if(token == null || "".equals(token)) return null; + token = token.substring(JWT_PREFIX.length()).trim(); + Claims payload = getAllClaimsFromToken(token); + List cstmrSno = payload.get("group",List.class); + return cstmrSno; + } } \ No newline at end of file diff --git a/src/main/java/com/palnet/biz/jpa/repository/pty/PtyCrtfyhpBasQueryRepository.java b/src/main/java/com/palnet/biz/jpa/repository/pty/PtyCrtfyhpBasQueryRepository.java index efa47fb..faaeb26 100644 --- a/src/main/java/com/palnet/biz/jpa/repository/pty/PtyCrtfyhpBasQueryRepository.java +++ b/src/main/java/com/palnet/biz/jpa/repository/pty/PtyCrtfyhpBasQueryRepository.java @@ -9,7 +9,8 @@ import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; import org.springframework.stereotype.Repository; -import java.time.LocalDateTime; +import java.util.Calendar; +import java.util.Date; import java.util.List; @Log4j2 @@ -21,11 +22,19 @@ public class PtyCrtfyhpBasQueryRepository{ public List confirmSms(String hpno , String crtfyNo){ QPtyCrtfyhpBas qEntity = QPtyCrtfyhpBas.ptyCrtfyhpBas; + Date now = Calendar.getInstance().getTime(); + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.MINUTE, -5); + Date prevTime = calendar.getTime(); + BooleanBuilder builder = new BooleanBuilder(); builder.and(qEntity.crtfyhpNo.eq(crtfyNo)); builder.and(qEntity.crtfyhpYn.eq("N")); - builder.and(qEntity.createDt.between(LocalDateTime.now().minusMinutes(5), LocalDateTime.now())); +// builder.and(qEntity.createDt.between(LocalDateTime.now().minusMinutes(5), LocalDateTime.now())); + builder.and(qEntity.createDt.goe(prevTime)); + builder.and(qEntity.createDt.loe(now)); + List entity = query.select(qEntity).from(qEntity) diff --git a/src/main/java/com/palnet/biz/jpa/repository/pty/PtyCstmrQueryRepository.java b/src/main/java/com/palnet/biz/jpa/repository/pty/PtyCstmrQueryRepository.java index 79a4ec2..641c105 100644 --- a/src/main/java/com/palnet/biz/jpa/repository/pty/PtyCstmrQueryRepository.java +++ b/src/main/java/com/palnet/biz/jpa/repository/pty/PtyCstmrQueryRepository.java @@ -1,12 +1,11 @@ package com.palnet.biz.jpa.repository.pty; +import com.palnet.biz.api.acnt.jwt.model.JwtGroupModel; +import com.palnet.biz.jpa.entity.*; import org.springframework.stereotype.Repository; import com.palnet.biz.api.acnt.jwt.model.JwtProfileRsModel; import com.palnet.biz.api.acnt.jwt.model.JwtUserModel; -import com.palnet.biz.jpa.entity.PtyCstmrBas; -import com.palnet.biz.jpa.entity.QPtyCstmrBas; -import com.palnet.biz.jpa.entity.QPtyCstmrDtl; import com.querydsl.core.BooleanBuilder; import com.querydsl.core.types.Projections; import com.querydsl.jpa.impl.JPAQueryFactory; @@ -14,6 +13,9 @@ import com.querydsl.jpa.impl.JPAQueryFactory; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; +import java.util.ArrayList; +import java.util.List; + @Log4j2 @Repository @RequiredArgsConstructor @@ -72,6 +74,8 @@ public class PtyCstmrQueryRepository{ public JwtUserModel findUserPassword(String userId) { QPtyCstmrBas basEntity = QPtyCstmrBas.ptyCstmrBas; + QPtyCstmrGroup groupEntity = QPtyCstmrGroup.ptyCstmrGroup; + BooleanBuilder builder = new BooleanBuilder(); builder.and(basEntity.userId.eq(userId)); @@ -79,6 +83,19 @@ public class PtyCstmrQueryRepository{ .from(basEntity) .where(builder) .fetchFirst(); + + List pcgEntityList = null; + if(entity != null){ + BooleanBuilder groupBuilder = new BooleanBuilder(); + groupBuilder.and(groupEntity.cstmrSno.eq(entity.getCstmrSno())); + + pcgEntityList = query.select(groupEntity) + .from(groupEntity) + .where(groupBuilder) + .fetch(); + } + + if(entity != null) { JwtUserModel model = new JwtUserModel(); model.setAuth(entity.getAuthId()); @@ -86,7 +103,17 @@ public class PtyCstmrQueryRepository{ model.setCstmrSno(entity.getCstmrSno()); model.setCstmrStatusCd(entity.getCstmrStatusCd()); model.setUserPswd(entity.getUserPswd()); - + if(pcgEntityList != null && !pcgEntityList.isEmpty()){ + List groupModelList = new ArrayList<>(); + for(PtyCstmrGroup pcgEntity : pcgEntityList){ + JwtGroupModel groupModel = new JwtGroupModel(); + groupModel.setGroupId(pcgEntity.getGroupId()); + groupModel.setGroupAuthCd(pcgEntity.getGroupAuthCd()); + groupModelList.add(groupModel); + } + model.setGroup(groupModelList); + } + return model; }else {