zoukankan      html  css  js  c++  java
  • SpringMVC拦截器拦截页面(坑)

    问题:在使用了MVC拦截器时,访问除登录页面以外的URL时,判断是否登录,未登录的访问全部跳转至登录界面,但是在设置好时,是会判断并跳转,但是在起初,未登录访问,会先进入访问的资源页面后,立即闪退去登录页面。

    但是明显这种状况是不满足权限拦截需求的,是错误操作。

    原因就在于一开始在web.xml中配置了  default默认servlet    然后对 *.html 资源的放行(因为不配无法访问到html资源。)

    在web.xml文件中经常看到这样的配置<servlet-name>default</servlet-name>,这个配置的作用是:对客户端请求的静态资源如图片、JS文件等的请求交由 默认的servlet进行处理,如下所示:

    <servlet-mapping>
            <servlet-name>default</servlet-name>
            <url-pattern>*.jpg</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>default</servlet-name>
            <url-pattern>*.png</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>default</servlet-name>
            <url-pattern>*.gif</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>default</servlet-name>
            <url-pattern>*.ico</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>default</servlet-name>
            <url-pattern>*.gif</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>default</servlet-name>
            <url-pattern>*.js</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>default</servlet-name>
            <url-pattern>*.css</url-pattern>
        </servlet-mapping>

    如何你的DispatcherServlet拦截"*.do"这样的有后缀的URL,就不存在访问不到静态资源的问题。
    如果你的DispatcherServlet拦截"/",为了实现REST风格,拦截了所有的请求,那么同时对*.js,*.jpg,*.html等静态文件的访问也就被拦截了。

    即使你之后在mvc的拦截器中进行了部分资源的放行也依旧无法访问静态资源,因为你访问静态资源时DispatcherServlet会将你的请求先拦截,放行后返回浏览器的依旧是/***.html,会再次访问,然后又进DispatcherServlet,如此循环。

    所以,default默认servlet的配置还是必须的。

    于是问题就产生了,下面是我开始的配置(web.xml中):

        <!--避免springmvc拦截以html结尾的请求-->
        <servlet-mapping>
            <servlet-name>default</servlet-name>
            <url-pattern>*.html</url-pattern>
        </servlet-mapping>

    但是,这样虽然表面上的功能都实现了,却会出现开始阐述的问题,没登录还是能有一瞬间看到被拦截的资源。

    解决方式很简单,在web.xml删除上面的配置,将 该默认servlet配置 移到mvc的配置文件中配置,如下:

    <!-- 配置静态资源 默认servlet配置  允许使用"/"做整体映射 等-->
    <mvc:default-servlet-handler />

    重新运行,问题解决,不会再进入被拦截页面后又闪跳会登录界面了。

  • 相关阅读:
    卷积神经网络-目标探测-笔记
    卷积神经网络-目标分类简述
    深度学习-卷积神经网络的发展-笔记
    深度学习-卷积神经网络笔记
    深度学习-传统神经网络
    深度学习-初识深度学习-笔记
    数据结构-链式队列-C++
    查看线程的id名字正在运行的线程数量[getName()--ident--enumerate--activeCount]--线程池--协程(gevent)--优先级队列(LifoQueue)
    线程-线程的(锁、死锁现象、守护线程)
    ftp(网络传输)--BaseRequesHandler(tcp协议下的多个客户端连接)--urandom(随机生成字节字符串)--hmac(类似于hashlib)
  • 原文地址:https://www.cnblogs.com/xk920/p/11832553.html
Copyright © 2011-2022 走看看