Maison > Questions et réponses > le corps du texte
在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;
}
}
大家讲道理2017-04-18 10:25:23
La raison découverte aujourd'hui est que la vue renvoyée a été interceptée par l'intercepteur et redirigée à tout moment. Modifiez simplement web.xml
.Ce qui suit consiste à configurer toutes les requêtes à traiter par springmvc
<servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
Ressources statiques configurées ci-dessous
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/dist/*</url-pattern>
<url-pattern>/WEB-INF/view/*</url-pattern>
</servlet-mapping>
correspond à <mvc:default-servlet-handler/>
default-servlet-handler dans springmvc.xml définira un DefaultServletHttpRequestHandler dans le contexte SpringMVC, qui filtrera les requêtes entrant dans le DispatcherServlet. S'il s'avère qu'il s'agit d'une requête non mappée, elle le sera. La requête sera gérée par le Servlet par défaut du serveur d'application WEB. S'il ne s'agit pas d'une requête de ressource statique, le DispatcherServlet continuera à la gérer
Généralement, le nom du servlet par défaut d'un serveur d'application WEB est default. Si le nom du servlet par défaut du serveur WEB utilisé n'est pas celui par défaut, vous devez le spécifier explicitement via l'attribut default-servlet-name
ringa_lee2017-04-18 10:25:23
Si votre intercepteur hérite de la classe HandlerInterceptorAdapter et remplace la méthode.
Peut-être pouvez-vous créer un motif régulier sans interception, comme suit :
Ensuite, faites un jugement régulier dans la méthode d'interception preHandle