okkydokky
508
2018-06-14 17:06:47
19
1096

인터셉터에서 response.sendRedirect("/")을 했는데 !!!



인터셉터에서 response.sendRedirect("/")을 했는데 !!!

왜 자꾸 로그인시 호출하는 uri 페이지가 없다고 에러가나는지 모르겟어요

로그인 서브밋하면 /user/loginPost로 post되면서 컨트롤러에서 작업 하고 post 인터셉터 걸리면서

sendredirect 되도록 되어있는데

sendRedirect가 먹질 않네요 ㅜㅜ 도와주세용


HTTP Status 500 – Internal Server Error




Type Exception Report


File [/WEB-INF/views/user/loginPost.jsp] not found



javax.servlet.ServletException: File [/WEB-INF/views/user/loginPost.jsp] not found
	org.apache.jasper.servlet.JspServlet.handleMissingResource(JspServlet.java:407)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:374)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)


0
0
  • 답변 19

  • 저기봐라
    728
    2018-06-14 17:17:45

    boot 인가요?

    boot에서는 jsp가 지원이 안되서 찾을 수 없다고 하더군요

    그래서 따로 처리가 필요하다고 들었는데

    0
  • okkydokky
    508
    2018-06-14 17:22:14
    죄송하지만 boot가뭐죠? spring STS사용하고잇어용


    0
  • 저기봐라
    728
    2018-06-14 17:24:01

    spring boot입니다

    0
  • Dh. k
    1k
    2018-06-14 17:25:07
    인터셉터부분 전체소스좀보여줘요
    0
  • okkydokky
    508
    2018-06-14 17:26:50

    아아 아니에염 jsp지원되고 찾는데 중간에 인터셉터에서 sendRedirect 를 호출하는데 이게 먹히질 않아서 로그인폼태그 action  경로로 jsp를 탐색해버리네요  해당 페이지는 없어서 못찾는거에용

    0
  • okkydokky
    508
    2018-06-14 17:28:14

    @Dh.k



    public class LoginInterceptor extends HandlerInterceptorAdapter{
        
        private static final String LOGIN = "login";
        private static final Logger logger = LoggerFactory.getLogger(LoginInterceptor.class);
        
            
        //세션에 해당 값 저장
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)throws Exception{
            
            HttpSession session = request.getSession();
            ModelMap modelMap = modelAndView.getModelMap();
            Object MemberVO = modelMap.get("MemberVO");
            
            //PRINT
            System.out.println("posthandle-login-intercept");
            
            if(MemberVO != null) {
                logger.info("new login success");
                session.setAttribute(LOGIN, MemberVO);

                response.sendRedirect("/"); 이부분
               
            }
        }
        
        //기존 세션에 정보가 남아있는 경우 삭제
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception{
            
            HttpSession session = request.getSession();
            
            //PRINT
            System.out.println("prehandle-login-intercept");
            
            if(session.getAttribute(LOGIN)!=null) {
                logger.info("clear login data before");
                session.removeAttribute(LOGIN);
            }
            return true;
        }
    }


    0
  • Dh. k
    1k
    2018-06-14 17:34:36

    pre핸들에서 세션확인과정거치고

    컨트롤 그다음이 post 핸들이에요

    post가기전에 컨트롤러에서 에러난걸로보이는데요?



    0
  • okkydokky
    508
    2018-06-14 17:37:15

    prehandle-login-intercept
    컨트롤러 - 로긴성공
    posthandle-login-intercept

    콘솔확인해보면 포스트까지 찍혀요 로그인까지 잘 동작하구요

    0
  • Dh. k
    1k
    2018-06-14 17:39:56

     response.sendRedirect("/"); 이부분 이부분 인터셉터에 걸리는거아니에요?

    0
  • Dh. k
    1k
    2018-06-14 17:41:50

    request.getRequestURI() 이걸로 url 어떤게들어오는지 순서대로 확인해보실래요?

    인터셉터 설정부분에서 맵핑패스나 익스클루드패스 함더확인해보시구여

    0
  • okkydokky
    508
    2018-06-14 17:53:51

    로그인시 /user/loginPost로 데이터를 Post하는데


    pre,controller,post 에서 각각 getRequestURI 한결과는 아래와 같네용

    pre==/user/loginPost
    prehandle-login-intercept
    controller==/user/loginPost
    로긴성공
    posthandle-login-intercept
    post==/user/loginPost


    맵핑부분은 아래처럼 문제가 없어보이구요

      
        <beans:bean id="loginInterceptor" class="net.oo.interceptor.LoginInterceptor"></beans:bean>
            <interceptors>
                <interceptor>
                    <mapping path="/user/loginPost"/>
                    <beans:ref bean="loginInterceptor"/>
                 </interceptor>
            </interceptors>

    0
  • Dh. k
    1k
    2018-06-14 18:01:38

    ...<mapping path="/user/loginPost"/> 여따가 거셨으니까

    pre핸들에서 세션지워지잖아여

    0
  • okkydokky
    508
    2018-06-14 18:08:38

    pre 핸들에서 세션지우는거랑은 근데 관련없는거 같아요

    지금 pre핸들 주석처리하고 서버 재구동시켜서 테스트했는데 그대로네요 ㅠㅠㅠ

    0
  • Dh. k
    1k
    2018-06-14 18:10:19

    일단 전체 경로를 들어가기전에 로그인을하게끔 인터셉터를 걸어주시는거면

    <mapping path="/**/*"/> 전체패스를 잡고

    <exclude-mapping path="/user/*"/> 사용자 로그인이나 로그아웃같은 패스는 일케 제외시켜주시고

    모든 패스에 인터셉터 걸려있으니까 pre핸들타고 거기서 세션확인여부해서

    pre핸들에서 세션확인하시고 없으면 response.sendRedirect("/user/login"); 로그인 페이지

    있으면  return true 줘보실래요?


    0
  • Dh. k
    1k
    2018-06-14 18:11:52

    post핸들쓰지마시구요

    0
  • Dh. k
    1k
    2018-06-14 18:13:00
    순서엉킨걸확인하셔야되는데 그걸확인못하시는거같은데..
    0
  • okkydokky
    508
    2018-06-14 18:22:52

    계속 도움주셔서 너무 죄송스럽고 감사하네요 ㅜㅜ


    음 일단 소개좀 드리면 글 작성같은 경우는 로그인여부를 미리 인터셉터에서 체크하는 데

    지금 말씀하시는 인터셉터는 아마 이 인터셉터를 말씀하시는것 같아요


    제가 지금 하려는 인터셉터는 아이디 패스워드를 입력해서 로그인 시 인터셉터가 걸리도록 하는거에용

    그래서 만약에 혹시라도 찌꺼기 세션이 남아있다면 pre인터셉터에서 세션을 청소해주고

    컨트롤러로 넘어가서 로그인 로직을 수행해요 그리고 로그인 성공시 모델에 해당 로그인 유저 정보를 담고


    @RequestMapping(value="/loginPost", method = RequestMethod.POST)
        public void loginPOST(LoginDTO dto, HttpSession session, Model model, HttpServletRequest req)throws Exception{
            MemberVO vo = memberService.login(dto);
                
            System.out.println("servlet++"+req.getRequestURI());
            
            if(vo==null) {
                System.out.println("로긴실패");
                return;
            }
            if(vo.getBlock()=="y") {
                model.addAttribute("block","y");
            }else {
                model.addAttribute("block","n");
                System.out.println("로긴성공");
                model.addAttribute("MemberVO",vo);
            }        
        }



    마지막 post에서는 세션에 값을 저장해주고 sendRedirect로 페이지를 이동하는 방식으로 구동되는거거든요 그래서 전체 패스로 안잡은거구용


    0
  • KDEV
    3k
    2018-06-18 08:00:53

    질문자님이 잘못 이해하시고 있는게 있습니다.

    sendRedirect의 행위자는 요청을 한 클라이언트입니다ㅡ

    postHandle에서 최종적으로는 loginPost를 응답해요

    0
  • okkydokky
    508
    2018-06-18 19:09:23

    감사합니다!

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.