09009
[Spring] 예제 2 - Interceptor 본문
로그인하지 않았는데도 글쓰기 페이지가 접속이 되는 문제가 있다.
인터셉터 동작 원리
package com.ja.finalproject.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
// 이 클래스는 JSP API를 사용해야 한다.
public class SessionInterceptor implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object obj) {
if(request.getSession().getAttribute("sessionUser") == null) {
System.out.println("로그인이 되어 있지 않습니다.");
}
return true;
}
}
servlet-context.xml
아래와 같이 작성하면 모든 요청은 먼저 Intercepter를 통과하여 controller로 가게 된다.
/**/ : 모든 파일 적용
<!-- 인터셉터 -->
<interceptors>
<interceptor>
<mapping path="/**"/>
<beans:bean class="com.ja.finalproject.interceptor.SessionInterceptor"></beans:bean>
</interceptor>
</interceptors>
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven />
<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
<resources mapping="/resources/**" location="/resources/" />
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
<!-- ja : 파일 업로드 관련.. 빈 등록.. -->
<beans:bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<beans:property name="maxUploadSize" value="100000000"></beans:property>
</beans:bean>
<!-- 인터셉터 -->
<interceptors>
<interceptor>
<mapping path="/**"/>
<beans:bean class="com.ja.finalproject.interceptor.SessionInterceptor"></beans:bean>
</interceptor>
</interceptors>
<!-- ja : 아래 패키지명 변경할 것 -->
<context:component-scan base-package="com.ja.finalproject.*.controller" />
</beans:beans>
<!-- 인터셉터 -->
<interceptors>
<interceptor>
<mapping path="/board/writeContentPage"/>
<mapping path="/board/writeContentProcess"/>
<mapping path="/board/updateContentProcess"/>
<mapping path="/board/updatePage"/>
<beans:bean class="com.ja.finalproject.interceptor.SessionInterceptor"></beans:bean>
</interceptor>
</interceptors>
exception을 발동시켜 forwarding 해야 한다.
SessionInterceptor.java
package com.ja.finalproject.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.ModelAndViewDefiningException;
// 이 클래스는 JSP API를 사용해야 한다.
public class SessionInterceptor implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object obj) throws ModelAndViewDefiningException {
if(request.getSession().getAttribute("sessionUser") == null) {
ModelAndView mv = new ModelAndView();
mv.setViewName("member/loginRequired");
throw new ModelAndViewDefiningException(mv);
// 예외를 발생시켜야 스프링 프레임워크에서 인지한다.
// 스프링 프레임워크로 예외를 넘긴다.
}
return true;
}
}
loginRequired.jsp
이제 사용자가 글쓰기 페이지로 임의로 링크로 입력해서 접속하면 접근이 제한된다.
controller가 실행되지 않고 intercpet에서 처리한다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
접근 권한이 없습니다. <a href="../board/mainPage">메인 페이지로 이동</a>
</body>
</html>
'Back-End > Spring' 카테고리의 다른 글
[Spring] 예제 3 - 회원가입 유효성 검사 (0) | 2023.05.25 |
---|---|
[Spring] 예제 2 - resources 경로 이미지 (0) | 2023.05.24 |
[Spring] 예제 2 - 암호화, 메일인증 (0) | 2023.05.24 |
[Spring] 예제 1 연습 - 테이블 설계 (0) | 2023.05.23 |
[Spring] 예제 2 - 파일 업로드 (0) | 2023.05.23 |
Comments