拦截器可以拦截html却无法拦截jsp

拦截器可以拦截html却无法拦截jsp

老师,在做项目作业的时候,做了个拦截器,要求没正常登陆不可以访问后台页面,我做了个配置了个拦截器,可以正常拦截html页面,但是由于在html页面无法使用jstl标签库,我将其改成jsp页面,就是把html页面原本的主题部分复制到jsp内部的html部分全覆盖。但是,我发现在同目录下的这两个页面,原html页面会被正常拦截,但是后面创建并复制内容进去的jsp页面却无法被拦截,为什么?

dept_list.html:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>科室列表</title>
    <link rel="stylesheet" href="css/index.css">
    <link rel="stylesheet" href="css/bootstrap.min.css">
</head>

<body>
<header>
    <div class="container">

        <nav>
            <a href="">内科</a>
        </nav>
        <nav>
            <a href="">外科</a>
        </nav>
        <nav>
            <a href="/category/list.do">分类</a>
        </nav>

    </div>
</header>
<section class="banner">
    <div class="container">
        <div>
            <h1>科室</h1>
            <p>科室列表</p>
        </div>
    </div>
</section>
<section class="main">
    <div class="container">
        <table class="table table-striped">
            <thead>
            <tr>
                <th>名称</th>
                <th>分类</th>
                <th>创建时间</th>
                <th>最后修改时间</th>
            </tr>
            </thead>
            <tbody>
            <c:forEach items="${depts}" var="dept">
                <tr>
                    <td>呼吸内科</td>
                    <td>1</td>
                    <td></td>
                    <td></td>
                    <td>

                        <a href="">修改</a>&nbsp;&nbsp;
                        <a href="">删除</a>

                    </td>
                </tr>
            </c:forEach>
            </tbody>
        </table>
    </div>
</section>
<section class="page">
    <div class="container">
        <div id="fatie">
            <a href="/dept/addPrompt.do">
                <button>新建</button>
            </a>
        </div>
    </div>
</section>
<footer>
    copy@慕课网
</footer>
</body>
</html>

dept_list.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--<!DOCTYPE html>--%>
<html>
<head>
    <meta charset="UTF-8">
    <title>科室列表</title>
    <link rel="stylesheet" href="css/index.css">
    <link rel="stylesheet" href="css/bootstrap.min.css">
</head>

<body>
<header>
    <div class="container">

        <nav>
            <a href="">内科</a>
        </nav>
        <nav>
            <a href="">外科</a>
        </nav>
        <nav>
            <a href="/category/list.do">分类</a>
        </nav>

    </div>
</header>
<section class="banner">
    <div class="container">
        <div>
            <h1>科室</h1>
            <p>科室列表</p>
        </div>
    </div>
</section>
<section class="main">
    <div class="container">
        <table class="table table-striped">
            <thead>
            <tr>
                <th>名称</th>
                <th>分类</th>
                <th>创建时间</th>
                <th>最后修改时间</th>
            </tr>
            </thead>
            <tbody>
            <c:forEach items="${depts}" var="dept">
                <tr>
                    <td>呼吸内科</td>
                    <td>1</td>
                    <td></td>
                    <td></td>
                    <td>

                        <a href="">修改</a>&nbsp;&nbsp;
                        <a href="">删除</a>

                    </td>
                </tr>
            </c:forEach>
            </tbody>
        </table>
    </div>
</section>
<section class="page">
    <div class="container">
        <div id="fatie">
            <a href="/dept/addPrompt.do">
                <button>新建</button>
            </a>
        </div>
    </div>
</section>
<footer>
    copy@慕课网
</footer>
</body>
</html>

拦截器配置:

<!--登录拦截器配置-->
<mvc:interceptors>
    <mvc:interceptor>
        <!--拦截所有路径-->
        <mvc:mapping path="/**"/>
        <bean class="com.lgq.hospital.global.LoginInterceptor"/>
    </mvc:interceptor>
</mvc:interceptors>

拦截器LoginInterceptor.java:

package com.lgq.hospital.global;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class LoginInterceptor implements HandlerInterceptor {
    //preHandle方法,运行controller方法之前执行此方法
    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
        System.out.println("登录拦截器的preHandle方法执行了");

        String url = httpServletRequest.getRequestURI();
        if (url.toLowerCase().indexOf("login") >= 0) {//检查路径是否存在“login”,存在的话则直接放行
            return true;
        }

        HttpSession session = httpServletRequest.getSession();
        if (session.getAttribute("user") != null) {//检查会话中的user变量是否为空,不为空的话则直接放行
            return true;
        }
        httpServletResponse.sendRedirect("login.html");
        return false;
    }

    //postHandle方法,在controller方法得到结果以后(return之后),但响应还没有真正返回的时候执行(即渲染视图之前)
    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
        System.out.println("登录拦截器的postHandle方法执行了");
    }

    //afterCompletion,请求完全处理完后执行
    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
        System.out.println("登录拦截器的afterCompletion方法执行了");
    }

}

(1)启动项目后,在浏览器地址栏输入http://localhost:8080/hospital_web/dept_list.html

http://img1.sycdn.imooc.com//climg/5d486c770001285713210588.jpg

http://img1.sycdn.imooc.com//climg/5d486c810001100212080611.jpg

http://img1.sycdn.imooc.com//climg/5d486d790001bc2505490279.jpg

老师解释一下这里,虽然是被正常拦截了,但是地址栏上的url为什么显示的确实另一个页面地址,这里的hospital_detail是前台详情页面的url地址。之后我再次访问dept_list.html被拦截后,地址栏显示的就是正常的,是登录页面的地址login.html

(2)启动项目后,在浏览器地址栏输入http://localhost:8080/hospital_web/dept_list.jsp

http://img1.sycdn.imooc.com//climg/5d486d210001cc1810860565.jpg

http://img1.sycdn.imooc.com//climg/5d486d2b0001520b14110639.jpg

http://img1.sycdn.imooc.com//climg/5d486d380001d85405310258.jpg

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好。

1、回车后访问地址改变的问题,有可能是idea设置的默认访问页导致的,例如下图的URL。在同学敲击回车时,可能还没有完全加载,然后在被拦截后,却被重定向到hospital_detail

http://img1.sycdn.imooc.com//climg/5d4920ec00011f3b13770820.jpg

2、编码过滤器不访问的问题,springmvc的拦截器就是不拦截jsp的,但是可以拦截对controller的请求,所以,可以将其放到web-inf下,通过转发访问,否则就只能用过滤器去拦截。

如果解答了同学的疑问,望采纳~

祝学习愉快~


  • 哆丶哆 提问者 #1
    可是我的默认页面不是hospital_detail,在控制器中也没有写重定向hospital_detail的语句,这个页面在我目前开发的代码中根本就没用到过,我只是把资源站跌进去而已
    2019-08-06 16:02:18
  • 好帮手慕阿满 回复 提问者 哆丶哆 #2
    同学可以先讲hospital_detail页面去掉,然后访问拦截的html再试试,按回车后访问的是那个页面。祝:学习愉快~
    2019-08-06 19:06:03
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师