为了账号安全,请及时绑定邮箱和手机立即绑定

springmvc mvc:exclude-mapping 不起作用

springmvc mvc:exclude-mapping 不起作用

弑天下 2019-02-24 12:05:32
在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; } }
查看完整描述

2 回答

?
守着一只汪

TA贡献1872条经验 获得超4个赞

今天查出原因是返回的视图也被拦截器拦截导致一直重定向,修改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 属性显式指定

查看完整回答
反对 回复 2019-03-01
  • 2 回答
  • 0 关注
  • 801 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号