java - springmvc mvc:exclude-mapping 不起作用
天蓬老师
天蓬老师 2017-04-18 10:23:23
0
3
950

在springmvc配置文件中加入下面的代码,路由为"/login"的url还是会被拦截到拦截器中

    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <mvc:exclude-mapping path="/login" />
            <bean class="com.stooges.common.interceptor.LoginInterceptor">             </bean>
        </mvc:interceptor>
    </mvc:interceptors>

拦截器LoginInterceptor

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        HttpSession session = request.getSession();
        if (session.getAttribute(Constants.SESS_MANAGER) == null) {
            if (request.getHeader("x-requested-with") != null
                    && request.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")){ //如果是ajax请求响应头会有,x-requested-with
                response.setHeader("sessionstatus", "timeout");//在响应头设置session状态
                response.setHeader("redirectUrl", request.getContextPath() + "/login");
            }else{
                String path = request.getRequestURI();////原页面

                //根据方法不同拼接参数
                String queryString="";
                if(request.getMethod().equals("GET")){
                    queryString = request.getQueryString();
                }else{
                    Enumeration<String> params=request.getParameterNames();
                    while(params.hasMoreElements()){
                        String paraName=params.nextElement();
                        queryString+=paraName+"="+request.getParameter(paraName)+"&";
                    }
                }
                if (queryString!=null && (!queryString.equals(""))) {
                    path+="?"+queryString;
                }
                response.sendRedirect(request.getContextPath() + "/login");
            }
            return false;
        }else{
            return true;
        }
    }
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

모든 응답(3)
大家讲道理

오늘 알아낸 이유는 반환된 뷰가 인터셉터에 의해 가로채어 항상 리다이렉트되었기 때문입니다.

다음은 springmvc가 처리할 모든 요청을 구성하는 것입니다

으아악

아래에 구성된 정적 리소스

으아악

springmvc.xml의 <mvc:default-servlet-handler/>
default-servlet-handler에 해당하는 것은 SpringMVC 컨텍스트에서 DefaultServletHttpRequestHandler를 정의하며, 이는 DispatcherServlet에 입력되는 요청을 검사합니다. 요청은 처리를 위해 WEB 애플리케이션 서버의 기본 서블릿으로 전달됩니다. 정적 리소스 요청이 아닌 경우 DispatcherServlet이 계속해서 처리합니다

일반적으로 웹 애플리케이션 서버의 기본 서블릿 이름은 default입니다. 사용되는 웹 서버의 기본 서블릿 이름이 default가 아닌 경우 default-servlet-name 속성을 통해 명시적으로 지정해야 합니다.

左手右手慢动作

인터셉터가 HandlerInterceptorAdapter 클래스를 상속하고 메서드를 재정의하는지 여부입니다.
다음과 같이 가로채기 없이 규칙적인 패턴을 만들 수 있습니다.


그런 다음 차단 방법 preHandle에서 정기적인 판단을 합니다

洪涛

<mvc:exclude-mapping path="/login" /> 잘못 작성했습니다

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿