์์คํ ์์๋ ๋ณด์ ๋๋ฌธ์ ๋ก๊ทธ์ธํ ์ฌ์ฉ์์ ๋ฉ๋ด ์ ๊ทผ ๋ฒ์๋ฅผ ์ ํํด์ผ ํ๋ค.
์๋ฅผ ๋ค์ด ์์คํ ๊ด๋ฆฌ์๋ ์์คํ ๊ด๋ฆฌ ๋ฉ๋ด๋ง ์ ๊ทผํ ์ ์์ด์ผ ํ๊ณ ๊ธ์ฌ๊ด๋ฆฌ์๋ ๊ธ์ฌ๋ฉ๋ด์๋ง ์ ๊ทผํ ์ ์์ด์ผ ํ๋ค.
์ธํฐ์ ํฐ๋ฅผ ํตํด ์๋์ฒ๋ผ ๊ตฌํํ๋ค.
package kr.dev.common.interceptor;
import kr.dev.cmmn.mapper.CmmnMapper;
import kr.dev.cmmn.model.MenuVo;
import kr.dev.cmmn.service.CmmnService;
import kr.dev.user.model.EmpVO;
import kr.dev.user.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.List;
@Slf4j
//๊ถํ์ฒดํฌ ์ธํฐ์
ํฐ
public class AuthInterceptor implements HandlerInterceptor {
@Autowired
UserService userService;
@Autowired
CmmnService commonService;
@Autowired
CmmnMapper cmmnMapper;
/**
* ๋ฉ๋ด ์ ๊ทผ ๊ถํ ์ฒดํฌ ์ธํฐ์
ํฐ
* @param request current HTTP request
* @param response current HTTP response
* @param handler chosen handler to execute, for type and/or instance evaluation
* @return
* @throws Exception
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String requestURI = request.getRequestURI();
log.info("requestURI = [{}]", requestURI);
//get sessionInfo
EmpVO vo = (EmpVO) request.getSession().getAttribute("vo");
//๋ฉ๋ด ์ ๊ทผ ์ต์ ๋ ๋ฒจ ์ฒดํฌ
String requiredAuthLevel = getMenuRequiredAuthLevel(requestURI);
/*****๊ด๋ฆฌ์์ธ ๊ฒฝ์ฐ****************************/
if (Integer.parseInt(vo.getEmpAuthLevel()) >= Integer.parseInt(requiredAuthLevel)) {
//๋ฉ๋ด ์ ๊ทผ๊ฐ๋ฅ ์ฌ๋ถ ์ฒดํฌ
if (userHasMenuAccess(vo.getEmpId(), requestURI)) {
return true;
//๊ด๋ฆฌ์์ด์ง๋ง ์ ๊ทผํ ์ ์๋ ๋ฉ๋ด
} else {
log.info("๊ถํ์ ์์ผ๋ ๋ฉ๋ด ์ ๊ทผ ๊ถํ์ด ์์ต๋๋ค.");
response.sendRedirect("/"); // ๋๋ ๋ค๋ฅธ ์ ๊ทผ ๊ฑฐ๋ถ ํ์ด์ง๋ก ๋ฆฌ๋ค์ด๋ ํธ
return false;
}
/*****๊ด๋ฆฌ์๊ฐ ์๋ ๊ฒฝ์ฐ****************************/
}
log.info("๊ด๋ฆฌ์๋ง ์ ๊ทผํ ์ ์๋ ๋ฉ๋ด์
๋๋ค.");
response.sendRedirect("/"); // ๋๋ ๋ค๋ฅธ ์ ๊ทผ ๊ฑฐ๋ถ ํ์ด์ง๋ก ๋ฆฌ๋ค์ด๋ ํธ
return false;
}
/**
* ๋ฉ๋ด์ ๊ทผ์ ํ์ํ ์ต์ ๋ ๋ฒจ ์ฒดํฌ
* @param requestURI
* @return
*/
private String getMenuRequiredAuthLevel(String requestURI) {
String authLevel = "";
//์์คํ
๋ฉ๋ด
if (requestURI.startsWith("/cmmn/")) {
authLevel = "2";
//์ฐ์ฐจ๋ฉ๋ด
} else if (requestURI.startsWith("/annual/")) {
authLevel = "1";
//๊ทธ ์ธ
} else {
authLevel = "2";
}
return authLevel;
}
/**
* ์ฌ์ฉ์์ ๋ฉ๋ด์ ๊ทผ ๊ถํ ์ฒดํฌ
* @param empId
* @param requestURI
* @return
*/
private boolean userHasMenuAccess(String empId, String requestURI) {
//์ฌ์ฉ์์ ๋งคํ๋ ๋ฉ๋ด ๋ชฉ๋ก ์กฐํ
List<MenuVo> menuList = cmmnMapper.selectUserMenuCodes(empId);
if (menuList != null && menuList.size() > 0) {
//์ ๊ทผํ๋ ค๋ ๋ฉ๋ด๊ฐ ์ฌ์ฉ์์ ๋งคํ๋ ๋ฉ๋ด์ ์๋ ๊ฒฝ์ฐ
for (MenuVo menuVo : menuList) {
if (requestURI.contains(menuVo.getMenuUrl())) {
return true;
}
}
}
return false;
}
}
ํ์ฌ ๋ชจ๋ ๋ฉ๋ด๋ ๊ด๋ฆฌ์ ์ด์๋ง ์ ๊ทผํ ์ ์๋ ์ํ์ด๋ค.
์ธ์ ์์ ๊ถํ๋ ๋ฒจ์ ๊ฐ์ ธ์ ๋ก๊ทธ์ธํ ์ฌ์ฉ์๊ฐ ๊ด๋ฆฌ์์ธ์ง ์ฒดํฌํ๋ค.
๊ด๋ฆฌ์๋๋ผ๋ ๋ณธ์ธ๊ณผ ๋งคํ๋ ๋ฉ๋ด๊ฐ ์๋๋ฉด ์ ๊ทผํ ์ ์๊ธฐ์ ํ์ฌ ์ ๊ทผํ๋ ค๋ ๋ฉ๋ด๊ฐ ๋ณธ์ธ์ ์์ด๋์ ๋งคํ๋ ๊ฒฝ์ฐ์๋ง ํต๊ณผ์ํค๋ ๋ก์ง์ด๋ค.
๊ฐ์ธ ์คํฐ๋ ๊ธฐ๋ก์ ๋ฉ๋ชจํ๋ ๊ณต๊ฐ์ด๋ผ ํ๋ฆฐ์ ์ด ์์ ์ ์์ต๋๋ค.
ํ๋ฆฐ ์ ์์ ๊ฒฝ์ฐ ๋๊ธ ๋ถํ๋๋ฆฝ๋๋ค.
'IT > development' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript] ๊ฐ์ฒด ํด์ฒด ํ ๋น(Object Destructuring Assignment)(feat. ES6) (53) | 2023.10.04 |
---|---|
[thymeleaf] ๋์ url ์์ฑ(feat. @{/url}) (59) | 2023.09.24 |
[Vue.js] checkbox ์ผ๊ด ์ฒดํฌ (56) | 2023.09.24 |
[development] ํฐ์คํ ๋ฆฌ ์ผ๊ด ๋๊ธ ์์ฑ ๊ฐ๋ฐ(feat. open API) (50) | 2023.09.13 |
[base64] ์ด๋ฏธ์ง๋ฅผ base64๋ก ์ธ์ฝ๋ฉ (64) | 2023.09.09 |
๋๊ธ