SpringMVC配置session过期拦截器,返回登录页面

spring-mvc.xml配置

<mvc:interceptors>
  <!-- session失效拦截器 -->
    <mvc:interceptor>   
    <!-- 匹配的是url路径, 如果不配置或/**,将拦截所有的Controller --> 
      <mvc:mapping path="${frontPath}/**" />  
        <!-- 不需要拦截的地址 -->
        <mvc:exclude-mapping path="${frontPath}"/>
        <mvc:exclude-mapping path="${frontPath}/"/>
        <mvc:exclude-mapping path="${frontPath}/login"/> 
        <bean class="com.jeeplus.modules.sys.interceptor.SystemSessionInterceptor"></bean>   
    </mvc:interceptor> 
</mvc:interceptors>

拦截器类:

public class SystemSessionInterceptor implements HandlerInterceptor { 
    @Override
    public void postHandle(HttpServletRequest request, 
        HttpServletResponse response, Object handler, 
        ModelAndView modelAndView) throws Exception { 
    } 
      
    @Override
    public void afterCompletion(HttpServletRequest request, 
        HttpServletResponse response, Object handler, Exception ex) 
        throws Exception { 
    } 
      
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, 
        Object handler) throws Exception { 
        Principal principal = UserUtils.getPrincipal();
        if (principal == null) {  
            response.setContentType("text/html");  
            response.setCharacterEncoding("utf-8");  
            PrintWriter out = response.getWriter();    
            StringBuilder builder = new StringBuilder();    
            builder.append("<script type="text/javascript" charset="UTF-8">");    
            builder.append("alert("登录已过期,请重新登录!");");    
            builder.append("parent.window.location.href='"+request.getContextPath()+"/f/login';");     
            builder.append("</script>");    
            out.print(builder.toString());    
            out.close();    
            return false;  
        }  
        return true;
    }
}
原文地址:https://www.cnblogs.com/lxcmyf/p/8041814.html