스프링 인터셉터로 권한체크

2022. 1. 27. 08:03Framework

반응형

로그인해야만 접근하도록 만든 페이지를 url만 알면 접근 되는 이슈 발생

이 때 필요한 것이 인터셉터

해당 컨트롤러가 실행되기 전(preHandle)과,

실행된 후(postHandle)에 실행할 내용 작성이 가능

 

 

아래는 현재 유저가 아무나 접근이 불가한 페이지에

부적절한 방법으로 접근하는 것을 방지하도록 인터셉터 이용

ture를 리턴할 시에 기존 요청 흐름대로 해당 컨트롤러 실행

false를 리턴할 시 컨트롤러 실행x

 

public class LoginInterceptor extends HandlerInterceptorAdapter {
	
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
		
        // 세션에 loginUser라는 키값으로 담아놓아서 먼저 세션 객체 얻어와
        // 로그인한 회원인지 아닌지를 확인하기 위해 
		HttpSession session = request.getSession();
		
		// 현재 요청을 보낸 사람이 로그인이 되어있을 경우 => Controller 실행
		if(session.getAttribute("loginUser") != null) {
			return true;
		} else {
			// 로그인이 되어있지 않을 경우 => Controller 실행 x
			session.setAttribute("alertMsg", "로그인 후 이용바랍니다");
			response.sendRedirect(request.getContextPath());
			return false;
		}
		
	}

}

 

여기서 끝이 아니라

어떤 url을 이용했을 때 저 메소드가 실행되길 원하니?

매핑을 해줘야 함. 그 매핑은 서블릿컨텍스트xml파일에

 

<interceptors>안에 다수의 인터셉터 작성 가능

빈 요소를 통해서 어떤 클래스를 빈으로 등록할지

어떤 id를 이용할건지 등록이 가능하고

매핑하려는 url을 매핑 태그로 작성. 다수 매핑도 가능


로그인하지도 않은 상태에서

회원정보를 볼 수 있는 마이페이지의 url을 입력해서 접근하려하면

 

 

띠용

 

인터셉터는 스프링에서 제공하는 것이라

프레임워크를 사용하지 않을 경우엔 filter 메소드 이용

반응형