본문 바로가기
Backend/Spring Framework

@RequestMapping(...method=RequestMethod...)

by 지구 2018. 5. 3.

Controller 내 work flow control (방어적 코딩) 을 해주는 방법


로그인페이지의 입력정보를 기준으로 로그인 로직을 처리하는 logonAction() 메소드가 있는데,

혹시 엔드유저가 주소창에 바로 "/logonAction.do" 를 치고 들어왔을 경우는 어떻게 해야하나?

.

@RequestMapping(...method=RequestMethod...) 를 사용하게 되면,

1) GET방식으로 접속했는지 (잘못된 접근으로 로그인페이지 이동 필요),

2) POST방식으로 접속했는지 구분하여 각각 다르게 로직을 처리할 수 있다.



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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
@RequestMapping(value="/logonAction.do", method=RequestMethod.GET)
    public ModelAndView logonAction() {
        
        System.out.println("[ logonAction() method=RequestMethod.GET start ...... ]");
                
        //==>Model(data) / View(jsp) 정보를 갖는 ModelAndView 생성
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("/logon.do");
 
        System.out.println("[ logonAction() method=RequestMethod.GET end ...... ]");
        
        return modelAndView;
    }
 
 
@RequestMapping(value="/logonAction.do", method=RequestMethod.POST)
    public ModelAndView logonAction( @ModelAttribute("user") User user, HttpSession session ) {
 
        System.out.println("[ logonAction() method=RequestMethod.POST start ...... ]");
        
        //==> Controller :: 권한/인증처리 작업
        if(session.isNew() || session.getAttribute("sessionUser")==null) {
            session.setAttribute("sessionUser"new User());
        }
        User sessionUser = (User)session.getAttribute("sessionUser");
        
        //==> Controller :: Navigation
        String viewName = "/user002/logon.jsp";
        
        if(sessionUser.isActive()) {
            viewName="/user002/home.jsp";
        }else {
            //==> Controller :: Business Logic 처리
            UserDAO userDAO = new UserDAO();
            userDAO.getUser(user);
            
            //==> Controller :: Business Logic 처리한 결과로 Navigation
            if(user.isActive()) {
                viewName = "/user002/home.jsp";
                session.setAttribute("sessionUser", user);
            }
        }
        System.out.println("[ action : "+viewName+" ]");
        
        //==> Client에 전달할 Message 생성
        String message = null;
        if(viewName.equals("/user002/home.jsp")) {
            message="[ logonAction() ] WELCOME";
        }else {
            message="[ logonAction() ] 아이디, 패스워드를 3자이상 입력해주세요.";
        }
        
        //==>Model(data) / View(jsp) 정보를 갖는 ModelAndView 생성
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName(viewName);
        modelAndView.addObject("message",message);
 
        System.out.println("[ logonAction() method=RequestMethod.POST end ...... ]");
        
        return modelAndView;
    }
cs


반응형

댓글