[Spring]spring 로그인 체크 하는 인터셉터

 

- AdminSessionInterceptor.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package com.test.exam.interceptor;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
 
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
 
import com.test.exam.controller.AdminController;
 
 
//인터셉터를 등록하는 방법은 스프링 3.1이전과 3.2 이후는 다르다. 우리는 3.2이후 방법을 쓴다.
public class AdminSessionInterceptor extends HandlerInterceptorAdapter {
    private static final Logger logger = LoggerFactory.getLogger(AdminSessionInterceptor.class);
    
    @Override
    public boolean preHandle(HttpServletRequest request,
                                        HttpServletResponse response, 
                                        Object handler) throws Exception {
        HttpSession session = request.getSession();    
//        logger.debug(" what user login? : {}", session.getAttribute("whatUser"));
        if((session.getAttribute("whatUser") != "admin"
            || (session.getAttribute("sessionAdmin") == null)){
            response.sendRedirect(request.getContextPath()+"/");
            return false;
        }
        return super.preHandle(request, response, handler);
    }
}


-root-context.xml
1
2
3
4
5
6
7
8
9
10
11
12
    <!-- interceptor 설정. -->
    <interceptors>
    
        <!-- admin session interceptor 설정. -->
        <!-- 어드민 로그인을 체크하고 로그아웃 상태일 경우 메인페이지로 보내는 인터셉터를 등록. -->
        <interceptor>
            <!-- /admin/* 형태의 요청에 한해서만 인터셉트 적용 -->
            <mapping path="/admin/**/*"/>
            <beans:bean class="com.test.exam.interceptor.AdminSessionInterceptor"/>
        </interceptor>
        
    </interceptors>

인터셉터는 필터의 역할과 같다.

요청, 응답, 응답후의 상황엥 처리가 가능하도록 메소드가 존재한다.

preHandler는 요청시에 처리하도록 한다.



 - 위의 로그인 처리는 필터로 가능하나 사용하기에는 좀더 유용한것 같다.


댓글()