본문 바로가기
Code/Web

[Spring Code] 인터셉터 구현 예시

by 스응 2023. 4. 13.
728x90
728x90

#  관련 포스팅

  - 인터셉터 개념 : https://young0105.tistory.com/199

 


DTO

더보기
1
2
3
4
5
6
7
@Data
public class User {
 
    private String username;
    private String password;
    
}
cs

 

jsp form 태그

더보기
1
2
3
4
5
<form action="/loginProc" method="post">
    <input type="text" name="username" value="young">
    <input type="password" name="password" value="1234">
    <input type="submit" name="login">
</form>
cs

 

Controller

더보기
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
32
33
34
35
@Controller
public class UserController {
    
    @GetMapping("/loginPage")
    public String loginPage() {
        
        return "login.html"// 내부에서 이동
    }
    
    // 인증된 사용자만 들어올 수 있게 막기
    // AuthInterceptor를 동작시키려면 URI 매핑 설계를 /auth/**로 해야 함
    
    @GetMapping("/auth/infoPage")
    public String infoPage(HttpServletRequest request) {
                
        System.out.println("여기 코드 실행하려면 로그인 필요");
        // 상대 위치로 들어왔으면 : 현재 그 시점에서 맞게 설계
        // 상대 경로 or 절대 경로 결정
        return "/info.html";
    }
    
    @PostMapping("/loginProc"// 필요하면 정의해서 사용
    public String loginProc(HttpServletRequest request, HttpServletResponse response, User user) {
        
        // 세션 저장 후 myInfo 페이지 이동 처리
        request.getSession().setAttribute("user", user);
        System.out.println(user);
        
        // redirect : 사용자(브라우저)로 돌아 갔다 옴
        //            == 새로운 request, response 객체가 만들어짐
        // response.sendRedirect("/auth/infoPage");
        // 위와 동일한 효과
        return "redirect:/auth/infoPage";
    }
}
cs

 

HandlerInterceptor 인터페이스의 구현 클래스

더보기
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
@Component
public class AuthInterceptor implements HandlerInterceptor {
 
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        
        // 세션 여부 확인
        HttpSession session = request.getSession();
        Object user = session.getAttribute("user");
        
        System.out.println("Request URI : " + request.getRequestURI()); // 요청 URI
        System.out.println("Request Method : " + request.getMethod()); // REST API Method
        
        if (user == null) {
            // System.out.println("미인증 사용자");
            response.sendRedirect("/loginPage");
            return false;
        }
        // true면 컨트롤러로 보냄
        // false면 컨트롤러로 보내지 않음
        return true;
    }
    
}
cs

 

WebMvcConfigurer 인터페이스의 구현 클래스

더보기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    
    @Autowired
    private AuthInterceptor authInterceptor;
    
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 동작시킬 때 모든 페이지를 가로채면 무조건 리다이렉트돼서 오류가 남
        // 명시하는 요청 설계 주소에서만 동작해야 함
        
        // 규칙 : 주소 요청이 /auth/**이 붙으면 AuthInterceptor가 동작하도록 구현 처리
        registry.addInterceptor(authInterceptor).addPathPatterns("/auth/**");
        
    }
    
}
cs

 

320x100
반응형

댓글