복붙노트

[SPRING] 인터셉터 preHandle ()이 login.html로 리디렉션되지 않음

SPRING

인터셉터 preHandle ()이 login.html로 리디렉션되지 않음

나는 스프링 어플리케이션을 가지고있다. index.jsp에 대한 직접 액세스를 막기 위해 sessionInterceptor를 도입했습니다. 사용자가 로그인하지 않은 경우 index.jsp에 액세스 할 수 없어야하며 login.html로 리디렉션되어야합니다. 코드는 preHandle () 메서드를 치고 모든 코드를 실행하지만 false를 반환하면 login.html로 리디렉션되지 않습니다. 뭐가 문제 야? 도움을 청하는 전문가가 있습니까? 미리 감사드립니다.

SessionInterceptor.java의 내 preHandle ()은 다음과 같습니다.

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        HttpSession session = request.getSession();

        // if displaying the home page, make sure the user is reloaded.
        if (request.getRequestURI().endsWith("login.html")) {
            session.removeAttribute("isUserLoggedIn");
        }

        if (session.getAttribute("isUserLoggedIn") == null && !request.getRequestURI().endsWith("login")) {
            response.sendRedirect(request.getContextPath() + "/login.html");
            return false;               
        }
        return true;
    }

나는 다음을 시도했지만 모두 헛된 것입니다.

RequestDispatcher dispatcher = request.getServletContext().getRequestDispatcher("/login.html");
                dispatcher.forward(request, response);

dispatcher-servlet.xml 설정은 다음과 같습니다.

<bean id="sessionInterceptor" class="com.xxx.xxx.xxx.SessionInterceptor" />
<bean id="annotationMapper" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
    <property name="interceptors">
        <list>
            <ref bean="sessionInterceptor" />
        </list>
    </property>
</bean>

<!-- Configures Handler Interceptors -->
<mvc:interceptors>
    <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
    <mvc:interceptor>
        <mvc:mapping path="/**" />
        <bean class="com.xxx.xxx.xxx.SessionInterceptor" />
    </mvc:interceptor>
</mvc:interceptors>

web.xml은 다음과 같습니다.

  <servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>login.html</welcome-file>
  </welcome-file-list>

해결법

  1. ==============================

    1.컨트롤러에서 캐치 될 논리 경로로 리디렉션을 시도 할 수 있습니다 시험

    컨트롤러에서 캐치 될 논리 경로로 리디렉션을 시도 할 수 있습니다 시험

    response.sendRedirect("/NotLogged");
    

    그리고 다음과 같은 함수를 만듭니다.

    @RequestMapping(value = {"/NotLogged"}, method = RequestMethod.GET)
    public String notLogged() {
        return "login.html";
    }
    

    나는 그것이 당신을 위해 일할 것이라는 점을 희망한다!

  2. from https://stackoverflow.com/questions/22990378/interceptor-prehandle-not-redirecting-to-login-html by cc-by-sa and MIT license