java - springmvc mvc:exclude-mapping 不起作用

 nuabolalalala6_535 发布于 2022-10-25 17:52

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

    
        
            
            
                         
        
    

拦截器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 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 个回答
  • <mvc:exclude-mapping path="/login" />写错了吧

    2022-11-12 01:41 回答
  • 你的拦截是否继承类HandlerInterceptorAdapter并重写方法。
    或许可以创建一个不用拦截的正则,如下:


    然后在拦截方法preHandle中正则判断

    2022-11-12 01:41 回答
  • 今天查出原因是返回的视图也被拦截器拦截导致一直重定向,修改web.xml就可以

    下面是配置所有的请求都由springmvc来处理

      <servlet-mapping>
        <servlet-name>springDispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
      </servlet-mapping>

    下面配置的静态资源

      <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/dist/*</url-pattern>
        <url-pattern>/WEB-INF/view/*</url-pattern>
      </servlet-mapping>

    对应springmvc.xml中的<mvc:default-servlet-handler/>
    default-servlet-handler 将在 SpringMVC 上下文中定义一个 DefaultServletHttpRequestHandler,它会对进入 DispatcherServlet 的请求进行筛查, 如果发现是没有经过映射的请求, 就将该请求交由 WEB 应用服务器默认的Servlet 处理. 如果不是静态资源的请求,才由 DispatcherServlet 继续处理

    一般 WEB 应用服务器默认的 Servlet 的名称都是 default.若所使用的 WEB 服务器的默认 Servlet 名称不是 default,则需要通过 default-servlet-name 属性显式指定

    2022-11-12 01:41 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有