회원가입을 한 경우 바로 로그인을 할 수 있는 것이 아니라, 관리자의 승인을 받아야 로그인할 수 있다.
회원가입 시 입력한 사번에 대해 유효성 검사를 진행한 후, 성공적으로 인증이 되면 승인 버튼이 활성화가 된다.
MVC부분
1. UserVO
package com.hanium.domain;
import java.util.Date;
import lombok.Data;
@Data
public class UserVO {
private String userid; //사번
private String userptype;
private String userdept;
private String username;
private String userpw;
private String useremail;
private String userbirth;
private String userphone;
private boolean valid; //유효성 검사가 완료된 경우 체크하는 플래그
private boolean permission; //승인 허가를 받은 경우 체크하는 플래그
private Date reqdate;
}
2-1. UserMapper(interface)
package com.hanium.mapper;
import java.util.List;
import com.hanium.domain.UserVO;
public interface UserMapper {
...
public UserVO findUserValidity(String userid); //1. 얘가 먼저 존재하는 사번인지 확인하고
public int userValidityCheck(UserVO user); //2. 검사가 완료되면 valid(유효성)값을 체크함
public int userPermission(UserVO user); //3. 유효한 사번이면 관리자가 승인
...
}
2-2. UserMapper(xml) 일부
(유효성 검사할 때 user테이블과 조인하는 테이블 : emp, dept)
<select id="findUserValidity"
resultType="com.hanium.domain.UserVO">
SELECT *
FROM user, emp, dept
WHERE user.userid = emp.empid and dept.deptcode = emp.empDeptCode and
(dept.deptname = user.userdept and dept.deptptype = user.userptype)
and userid=#{userid}
</select>
<update id="userValidityCheck">
UPDATE user
SET valid=1
WHERE userid = #{userid}
</update>
<update id="userPermission">
update user
set permission=1
where userid=#{userid} and
valid=1;
</update>
3-1. UserService(interface)
package com.hanium.service;
import java.util.List;
import com.hanium.domain.UserVO;
public interface UserService {
...
public boolean findUserValidity(String userid); //사번 인증 (유효성확인)
public boolean setUserValid(UserVO user); //사번 인증 (valid체크)
public boolean setUserPermission(UserVO user); //유저 승인
}
3-2. UserServiceImpl
package com.hanium.service;
import java.util.List;
import org.springframework.stereotype.Service;
import com.hanium.domain.UserVO;
import com.hanium.mapper.UserMapper;
import lombok.AllArgsConstructor;
@Service
@AllArgsConstructor
public class UserServiceImpl implements UserService {
private UserMapper mapper;
...
@Override
public boolean findUserValidity(String userid) {
UserVO validUser = mapper.findUserValidity(userid);
if(validUser==null) {
return false;
}
else
return true;
}
@Override
public boolean setUserValid(UserVO user) {
return mapper.userValidityCheck(user)==1;
}
@Override
public boolean setUserPermission(UserVO user) {
return mapper.userPermission(user)==1;
}
}
4. UserController
package com.hanium.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import com.hanium.domain.UserVO;
import com.hanium.service.UserService;
import lombok.AllArgsConstructor;
import lombok.extern.log4j.Log4j;
@Log4j
@Controller
@RequestMapping("/user/*")
@AllArgsConstructor
public class UserController {
private UserService service;
...
@ResponseBody
@RequestMapping(value = "/valid")
public String valid(@RequestParam("userid") String userid) {
userid = userid.toString();
UserVO user = service.get(userid);
log.info(user.getUsername());
// 1. 사번 유효성 검증
if (service.findUserValidity(userid)) {
log.info("[ CONTROLLER ] 사번이 유효합니다.");
// 2. user valid check
service.setUserValid(user);
return "success";
} else {
log.info("[ CONTROLLER ] 사번이 유효하지 않음");
return "fail";
}
}
@ResponseBody
@RequestMapping("/permission")
public String permission(@RequestParam("userid") String userid) {
userid=userid.toString();
UserVO user = service.get(userid);
log.info(user.getUsername());
service.setUserPermission(user);
return "success";
}
}
jsp부분
5. "인증이 완료되었습니다(혹은 실패했습니다)."를 띄워주는 모달창
(이거 bootstrap모달 가져온거라서 직접 쓰려면 import 필요!)
<!-- Modal -->
<div class="modal fade" id="staticBackdrop" data-backdrop="static"
data-keyboard="false" tabindex="-1"
aria-labelledby="staticBackdropLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" id="modal_this">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="staticBackdropLabel">사번 인증</h5>
<button type="button" class="close" data-dismiss="modal"
aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<span id="user_valid">사번 인증이 완료되었습니다.</span>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-danger" data-dismiss="modal"
id="modal_ok" onclick="location.reload();">닫기</button>
</div>
</div>
</div>
</div>
6. 테이블 (jstl로 리스트 정보를 띄워줌)
인증이 완료된 경우의 인증버튼과 인증 미완료된 경우의 승인버튼에는 disable상태로 지정되도록 조건문을 사용한다.
${userRequest}
더보기
<c:foreach items="${userRequest}">의 userRequest는 아래의 userRequestList컨트롤러에서 받아온 정보임
@GetMapping("/user_request")
public void userRequestlist(Model model) {
model.addAttribute("userRequest", service.getUserRequest());
}
<table class="table">
<thead>
<tr>
<th style="width: 30px;">Id</th>
<th>승인 요청 날짜</th>
<th>발전소 구분</th>
<th>부서명</th>
<th>사번</th>
<th>사번 인증</th>
<th>사원명</th>
<th>승인</th>
</tr>
</thead>
<tbody id="table_body">
<c:forEach items="${userRequest}" var="request" varStatus="status">
<tr>
<td style="width: 30px;"><c:out value="${status.count}" /></td>
<td><fmt:formatDate pattern="yyyy-MM-dd"
value="${request.reqdate}" /></td>
<td><c:out value="${request.userptype}" /></td>
<td><c:out value="${request.userdept}" /></td>
<td><c:out value="${request.userid}" /></td>
<td><c:if test="${request.valid eq false}">
<button class="btn btn-danger" data-oper="valid"
data-toggle="modal" id="assess_btn"
data-target="#staticBackdrop"
onclick="validate('${request.userid}')">인증</button>
</c:if> <c:if test="${request.valid eq true}">
<button class="btn btn-danger" disabled="disabled">완료</button>
</c:if></td>
<td><c:out value="${request.username}" /></td>
<c:if test="${request.valid eq true}">
<td><button class="btn btn-success" data-oper="permission"
onclick="permiss('${request.userid}')">승인 확인</button></td>
</c:if>
<c:if test="${request.valid eq false}">
<td><button type="button" class="btn btn-success"
disabled="disabled">인증 필요</button></td>
</c:if>
</tr>
</c:forEach>
</tbody>
</table>
7. javascript+ajax 코드
<script>
/*사번 인증*/
function validate(id) {
$.ajax({
contentType : "application/json; charset=utf-8;",
type : "GET",
url : "/user/valid",
data : {
"userid" : id
},
success : function(response) {
//conlose.log(response);
if (response == "success") {
$("#user_valid").text("인증에 성공하였습니다.");
} else
$("#user_valid").text("인증에 실패하였습니다.");
},
error : function(request, status, error) {
alert("code:" + request.status + "\n" + "message:"
+ request.responseText + "\n" + "error:" + error);
}
})
}
/*유저 승인*/
function permiss(id) {
if (confirm("사용자를 승인하시겠습니까?") == true) {
$.ajax({
contentType : "application/json; charset=utf-8;",
type : "GET",
url : "/user/permission",
data : {
"userid" : id
},
success : function(response) {
//conlose.log(response);
alert("승인이 완료되었습니다.");
location.reload();
},
error : function(request, status, error) {
alert("code:" + request.status + "\n" + "message:"
+ request.responseText + "\n" + "error:" + error);
}
})
} else {
return;
}
}
</script>
'Spring > ICS단계적보안성평가 프로젝트(한이음)' 카테고리의 다른 글
[Spring] ICS단계적보안성평가WEB - Direct DA 상세 유형 분류 (0) | 2021.08.14 |
---|---|
[Spring] ICS단계적보안성평가WEB - DA 단계적 보안성 평가 코드 (0) | 2021.08.05 |
댓글