Spring-MyWeb 인터셉터

정원·2022년 6월 24일

Spring-MyWeb

목록 보기
11/16

22.06.24 인터셉터,PrintWriter

회원권한이 필요한 페이지 요청 인터셉터

UserAuthHandler 인터셉터 생성

회원권한이 필요한 페이지 요청이 들어왔을 때, 요청을 가로채 확일할 인터셉터
글쓰기 화면과 마이페이지 화면 들어가는 요청을 가로채 검사하도록 한다.
권한이 없다면 로그인 페이지로 보내자.

<script>
package com.spring.myweb.util.interceptor;

public class UserAuthHandler implements HandlerInterceptor{
	
	@Override
	public boolean preHandle(HttpServletRequest request, 
			HttpServletResponse response, Object handler)throws Exception {
		
		//세션에서 로그인 데이터를 얻은 후 확인을 하자
		HttpSession session = request.getSession();
		
		if(session.getAttribute("login") == null) {
			//로그인 안했네?
			response.sendRedirect(request.getContextPath() + "/user/userLogin");
			return false; //false 컨트롤러 진입을 막는다.
		}
		return true; //로그인 한 사람은 통과~
	}	
}
</script>

interceptor-config.xml

UserAuthHandler 인터셉터 추가.
/freeboard/freeRegist
/user/userMypage
요청이 들어왔을때 UserAuthHandler 인터셉터 발동

<!-- namespaces 탭에서 mvc 기능 추가 -->
<!-- web.xml에 초기 설정 파일로 이 파일을 추가 -->
	
<bean id="userLoginSuccessHandler" class="com.spring.myweb.util.interceptor.UserLoginSuccessHandler" />
<bean id="userAuth" class="com.spring.myweb.util.interceptor.UserAuthHandler" />
	
<mvc:interceptors>		
	<!-- 로그인 이후에 실행되는 postHandler -->
	<mvc:interceptor>
		<mvc:mapping path="/user/login"/>
		<ref bean="userLoginSuccessHandler" />
	</mvc:interceptor>
		
	<!-- 로그인 권한을 체크하는 핸들러 -->
	<mvc:interceptor>
		<mvc:mapping path="/freeboard/freeRegist"/>
		<mvc:mapping path="/user/userMypage"/>
		<ref bean="userAuth"/>
	</mvc:interceptor>		
</mvc:interceptors>

게시판 권한 인터셉터

BoardAuthHandler 인터셉터 생성

화면에서 변경, 수정, 삭제가 일어날 때, writer값을 넘겨주도록 처리
게시글 수정, 삭제에 대한 권한 처리 핸들러
세션값과 writer(작성자) 정보가 같다면 컨트롤러를 실행,
그렇지 않다면 '권한이 없습니다.' 경고창 출력 후 뒤로가기.
권한이 없습니다 경고창은 jsp에서 했었던 PrintWriter 객체를 이용하시면 됩니다.
PrintWriter 객체는 response 객체에게 받아 옵니다.

<script>
package com.spring.myweb.util.interceptor;

public class BoardAuthHandler implements HandlerInterceptor {
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
				    Object handler)	throws Exception {
		
		System.out.println("게시판 권한 인터셉터 발동!");
		
		String writer = request.getParameter("writer");
		HttpSession session = request.getSession();
		UserVO vo = (UserVO)session.getAttribute("login");
		
		System.out.println("화면에서 넘어오는 값: " + writer);
		System.out.println("세션에 저장된 값: " + vo.getUserId());
		
		if(vo != null) { //로그인중
			if(writer.equals(vo.getUserId())) { //아이디와 작성자가 일치하면 통과
				System.out.println("글쓴이가 너가 맞구나");
				return true;
			}
		}
		
		//로그인 사용자가 아니라면 경고창 출력
		response.setContentType("text/html; charset=UTF-8");
		PrintWriter out = response.getWriter();
		out.print("<script> \r\n");
		out.print("alert('권한이 없습니다.'); \r\n");
		out.print("hostory.back(); \r\n");
		out.print("</script>");
		
		out.flush();
		
		return false;		
	}	
}
</script>

interceptor-config.xml

BoardAuthHandler 인터셉터 등록.

<bean id="userLoginSuccessHandler" class="com.spring.myweb.util.interceptor.UserLoginSuccessHandler" />
<bean id="userAuth" class="com.spring.myweb.util.interceptor.UserAuthHandler" />
<bean id="boardAuth" class="com.spring.myweb.util.interceptor.BoardAuthHandler" />
	
<mvc:interceptors>		
	<!-- 로그인 이후에 실행되는 postHandler -->
	<mvc:interceptor>
		<mvc:mapping path="/user/login"/>
		<ref bean="userLoginSuccessHandler" />
	</mvc:interceptor>
		
	<!-- 로그인 권한을 체크하는 핸들러 -->
	<mvc:interceptor>
		<mvc:mapping path="/freeboard/freeRegist"/>
		<mvc:mapping path="/user/userMypage"/>
		<ref bean="userAuth"/>
	</mvc:interceptor>
		
	<mvc:interceptor>
		<mvc:mapping path="/freeboard/freeModify"/> <!-- 수정페이지 이동 -->
		<mvc:mapping path="/freeboard/freeUpdate"/> <!-- 수정 요청 -->
		<mvc:mapping path="/freeboard/freeDelete"/> <!-- 삭제 요청 -->
		<ref bean="boardAuth"/>
	</mvc:interceptor>		
</mvc:interceptors>

freeDetail.jsp

변경버튼에 writer추가

<button type="button" class="btn btn-primary" 
onclick="location.href='<c:url value="/freeboard/freeModify?
bno=${article.bno}&writer=${article.writer}" />'">변경</button>

freeRegist.jsp

글쓰기 페이지의 작성자 userId로 변경하고 readonly.

<tr>
	<td class="t-title">NAME</td>
	<td><input class="form-control input-sm" name="writer" 
    	value="${login.userId}" readonly></td>
</tr>

로그아웃 내가 작성

0개의 댓글