一,作用:
解决了即使你没有访问权限,但你在浏览器中直接输入正确的url,你依然可以访问页面
二,实现思路
1.在springMVC.xml文件中添加Interceptor的配置 对拦截信息进行设置
<!-- interceptor拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/> <!-- 拦截器拦截的请求路径-->
<mvc:exclude-mapping path="/user/doLogin"/> <!-- 设置那些请求不走拦截器-->
<mvc:exclude-mapping path="/user/login"/>
<bean class="com.qm.interceptor.UserSessionInterceptor"/> <!-- 自定义拦截器的类路径-->
</mvc:interceptor>
</mvc:interceptors>
2.新建一个包 存放拦截器
![](https://img-blog.csdnimg.cn/img_convert/c99cc6c907aa42a44bfa3e67b425283a.png)
3.创建Interceptor类 继承HandlerIntercepto
重写preHandle,postHandle,afterCompletion方法
package com.qm.interceptor;
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 UserSessionInterceptor implements HandlerInterceptor {
//请求在进入controller之前需要执行的方法
//返回值时boolean类型,true代表允许继续向后请求,false代表不允许再向后访问了(拒绝访问)
//解决了即使你没有访问权限,但你在浏览器中直接输入正确的url,你依然可以访问页面,此拦截器的目的就是解决这个问题。
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("执行preHandla方法");
//拿到用户输入的登陆信息
HttpSession session = request.getSession();
// 判断当前用户是否已经登陆
//如果登录的账户密码不为空 则结果为真 正常运行 进入首页
//否则 登录的账户密码为空 则账户密码错误 重定向到登录页面
if(session.getAttribute("success")!=null){
return true;
}else {
//重定向
response.sendRedirect("/user/doLogin");
return false;
}
}
//执行controller,但是还没有返回给客户端数据时,进行调用
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("执行postHandle方法");
}
//执行为controller并且响应视图和数据后,执行此方法
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("执行afterCompletion方法");
}
}
注意:
![](https://img-blog.csdnimg.cn/img_convert/7b72fac1c5daa761dc5c4a22e000409c.png)
此填写与controller中用户登录方法中一致
![](https://img-blog.csdnimg.cn/img_convert/31cb4b31b04a2edb0a8bd2fb0b22ddd2.png)