SpringMVC登录验证拦截器需要注意的两点

在上一篇笔记 《SpringMVC登录验证从有到无》的末尾提到之前实现的拦截器存在两个问题,将记录在这篇笔记中。

这两个问题分别是:

  • 静态资源的访问问题
  • iframe遇见response.sendRedirect()存在的问题

1.静态资源的访问问题

如果web.xml中的配置如下:


    spring-mvc
    org.springframework.web.servlet.DispatcherServlet
    
        contextConfigLocation
        classpath:spring-mvc.xml
    
    1
    true


    spring-mvc
    
    /

spring-mvc.xml的静态资源配置如下:



通过代码发现,会把所有的请求都交给DispatcherServlet处理,那么当我们访问静态文件的时候,也会被拦截器拦截,拦截器中没有对静态文件做特殊处理,所以会导致当拦截到静态资源文件return false,无法顺利进入页面。

所以简单明了的解决办法就是,只把.do或者.htm这种带有后缀的请求交给DispatcherServlet去处理,那么静态资源就会交给Web应用服务器默认的Servlet处理。

只需要做出以下修改就可以避免对静态资源的拦截:


    spring-mvc
    
    *.do

注意:在验证此问题的时候会受到浏览器缓存的影响,所以应该清空浏览器缓存文件之后再去访问静态资源文件进行验证。

2.iframe遇见response.sendRedirect()存在的问题

当请求是从iframe区域发送的,并且未通过登录验证,此时登录界面将会显示在iframe区域内。

SpringMVC登录验证拦截器需要注意的两点_第1张图片
iframe遇见response.sendRedirect()存在的问题.png

经过一番google之后,找到的解决办法是:

        //  response.sendRedirect("/console/login.do");

        // 解决重定向登录界面在iframe页面显示不在top页面显示的问题
        PrintWriter out = response.getWriter();
        out.println("");
        out.println("");
        out.println("");

问题虽然得到了解决,但是总感觉这种解决办法并不是特别优雅,以后如果找到更优雅的解决方案再做修改。

你可能感兴趣的:(SpringMVC登录验证拦截器需要注意的两点)