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 />

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

  • 相关阅读:
    用开源项目CropImage实现图片的裁剪(不推荐)
    设定当前视图中所有控件字体的方法
    用开源项目cropper实现对图片中任意部分进行裁剪
    从源码角度一步一步来修改PreferenceActivity界面
    自定义PreferenceActivity和PreferenceFragment的样式
    Eclipse 在线汉化的和修改字体大小、颜色的方法
    用level-list让同一个ImageView根据条件来显示不同的内容
    ClipDrawable属性介绍
    自己用图片做的可旋转、不确定进度的ProgressBar
    Android工具类 DateUtil,可以用它方便的进行日期的操作
  • 原文地址:https://www.cnblogs.com/xk920/p/11832553.html
Copyright © 2011-2022 走看看