java - springmvc mvc:exclude-mapping 不起作用
本文介绍了java - springmvc mvc:exclude-mapping 不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
在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;
}
}
解决方案
今天查出原因是返回的视图也被拦截器拦截导致一直重定向,修改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 属性显式指定
这篇关于java - springmvc mvc:exclude-mapping 不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文