拦截器可以拦截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> <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> <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
老师解释一下这里,虽然是被正常拦截了,但是地址栏上的url为什么显示的确实另一个页面地址,这里的hospital_detail是前台详情页面的url地址。之后我再次访问dept_list.html被拦截后,地址栏显示的就是正常的,是登录页面的地址login.html
(2)启动项目后,在浏览器地址栏输入http://localhost:8080/hospital_web/dept_list.jsp
正在回答
同学你好。
1、回车后访问地址改变的问题,有可能是idea设置的默认访问页导致的,例如下图的URL。在同学敲击回车时,可能还没有完全加载,然后在被拦截后,却被重定向到hospital_detail
2、编码过滤器不访问的问题,springmvc的拦截器就是不拦截jsp的,但是可以拦截对controller的请求,所以,可以将其放到web-inf下,通过转发访问,否则就只能用过滤器去拦截。
如果解答了同学的疑问,望采纳~
祝学习愉快~
- 参与学习 人
- 提交作业 323 份
- 解答问题 8263 个
本阶段将带你学习主流框架SSM,以及SpringBoot ,打通成为Java工程师的最后一公里!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星