로그인하는 사원은 부서 코드가 뭐냐에 따라 각각 다른 작업 그룹에 속해 있습니다. "업무관리"메뉴를 선택하면 로그인한 사용자가 어떤 업무에 속해 있냐에 따라 각각의 부서에 맞는 사용자의 메뉴로 접속될 수 있도록 하였습니다.

우리가 이전 작업에서는 세션을 사용했기 때문에 아래와 같이 세션에서 뷰에 대한 정보를 꺼내서 다음과 같이 작업하였습니다. 

 

 

LoginSuccessHandler를 수정하여 SecurityLoginDTO에서 메뉴 정보를 꺼낸 후 가공하여 원하는 정보를 menupath에 세팅합니다. 이 작업은 EmpServiceImpl클래스의 login메소드에서 처리하던 작업입니다.

//로그인 사용자의 정보에서 메뉴 정보를 꺼내서 수정하여 다시 셋팅합니다.
if(dto!=null) {
	String menuPath = dto.getMenupath();
	System.out.println(menuPath);
	menuPath= menuPath.substring(menuPath.indexOf("/")+1,menuPath.indexOf("_"));
	dto.setMenupath(menuPath);	
}

 

showjobMenu메서드의 매개변수에 인증된 사용자 정보를 받을 수 있도록 Principal principal을 추가합니다. principal은 java.security.Principal타입 이지만 로그인이 완료되면 내부에는 인증된 정보인 UsernamePasswordAuthenticationToken객체가 매핑됩니다.

매핑된 정보에서 SecurityLoginDTO객체를 꺼내서 menu정보를 꺼내 리턴하도록 합니다.

@RequestMapping(value="/menu/job.do",method=RequestMethod.GET)
	public String showjobMenu(HttpServletRequest req,Principal principal ) throws Exception{
		SecurityLoginDTO loginUser =
				(SecurityLoginDTO)((UsernamePasswordAuthenticationToken)principal).getPrincipal();
		String menupath = "";
		menupath = loginUser.getMenupath();
		return menupath;
}

 

"9401023jang/1234" 를 아이디와 패스워드로 입력하고 로그인합니다. "업무관리" 메뉴를 선택하면 "9401023 jang"사용자는 "d001"인사팀으로 "인사관리" 그룹에 속하기 때문에 왼쪽 메뉴에 "/menu/insa_menu.jsp"가 연결되어야 합니다.

 

"Logout"을 하고 "92115kim/1234"로 로그인을 하면 "92115kim"사용자는 "d003"으로 "j003"그룹으로 "전산관리" 그룹에 속하기 때문에 왼쪽 메뉴에  "/menu/it_menu.jsp"가 연결되어야 합니다.

 

각 사원이 속한 작업 그룹을 메뉴 위에 출력하기 위해 "/WEB-INF/layout/mainLayout.jsp" 파일에 taglib를 추가합니다.

<%@ taglib prefix="se" uri="http://www.springframework.org/security/tags" %>

 

사용자의 인증 정보를 담고 있는 principal의 job_category의 값을 연결합니다.

<se:authorize access="isAuthenticated()">
         	<se:authentication property="principal.job_category"/>  
</se:authorize>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles" %>
<%@ taglib prefix="se" uri="http://www.springframework.org/security/tags" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="/kimsaemERP/common/css/main.css" />
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<style>
	/* Remove the navbar's default margin-bottom and rounded borders */
	.navbar {
		margin-bottom: 0;
		border-radius: 0;	
	}
	
	body{
		color: black;
	}
	/*  #toparea{
		padding: 30px;
	}  */
	/* body{
		background-color: #edeef1
	} */
</style>
<title>Insert title here</title>
</head>
<body>
	<div>
		<tiles:insertAttribute name="top"></tiles:insertAttribute>
	</div>
	<div style="background-color: #edeef1;padding: 20px;height: 800px">
		
			<div class="row" style="margin-left: auto;margin-right: auto;">
			 	<div class="col-sm-3" 
			 	style="background-color: white;margin-right:10px;padding: 0px ">
			 		 <div
			 		 style="border-color:white;height: 800px;">
				        <div style="background-color:#63cde7;padding: 20px;
				        font-family:HY-견고딕;font-size: 16pt;color: white;
				         font-weight: bolder;">
				         <se:authorize access="isAuthenticated()">
				         	<se:authentication property="principal.job_category"/>  
				         </se:authorize>
				         </div>

				       	<tiles:insertAttribute name="menu"></tiles:insertAttribute>
      				 </div>
			 	</div>
			 	<div class="col-sm-8" style="background-color: white;height: 800px;margin-left: auto;margin-right: auto;">

			 		<tiles:insertAttribute name="content"></tiles:insertAttribute>
			 	</div>
			</div>
	</div>
	
</body>
</html>

 

실행하면 로그인 사용자가 어떤 작업 그룹에 속해 있냐에 따라 다음과 같이 작업 그룹이 출력됩니다.

 

+ Recent posts