本文共 2060 字,大约阅读时间需要 6 分钟。
拦截器一般用于检测用户是否有登录, 防止未登录时用户直接输入映射地址跳转到需要登录的页面
package com.atguigu.springboot.component;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class LoginHandlerInterceptor implements HandlerInterceptor { /* 处理器方法执行前执行 */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String user = (String) request.getSession().getAttribute("loginUser"); if(null==user){ request.setAttribute("msg", "你仍未登录..."); request.getRequestDispatcher("/index").forward(request, response); return false; } else{ return true; } } /* 处理器方法执行后执行 */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } /* 页面渲染后执行 */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { }}
创建一个LoginHandlerInterceptor实现拦截器接口的类, 重写preHandle方法; 其中request.getSession().getAttribute(“loginUser”); 是在登录成功时 session.setAttribute(“loginUser”,username); 已经设置好的
1、客户端跳转不能传送数据, 所以 request.setAttribute(“msg”, "你仍 未登录…"); 不能传送到页面上。 2、如果要用客户端跳转的话,要这样写response.sendRedirect(“/server.context-path/rrr”);
@Configurationpublic class MyMvcConfig extends WebMvcConfigurerAdapter { //保险做法是将该拦截器投入到容器中, 否则可能会拦截器会报某个变量空指针异常 @Bean public LoginHandlerInterceptor getLoginHandlerInterceptor() { return new LoginHandlerInterceptor(); } @Override public void addInterceptors(InterceptorRegistry registry) { //添加拦截器 registry.addInterceptor(getLoginHandlerInterceptor()).addPathPatterns("/**").excludePathPatterns("/rrr"); };
在mvc配置中加上addInterceptors方法;
addPathPatterns("/") 表示所有映射地址都会拦截;**
excludePathPatterns("/rrr");是指除了这些映射地址之外
转载地址:http://auern.baihongyu.com/