springboot -- 拦截器(HandlerInterceptor)

前言

拦截器一般用于检测用户是否有登录, 防止未登录时用户直接输入映射地址跳转到需要登录的页面

正文

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”);

@Configuration
public 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");是指除了这些映射地址之外

发布了52 篇原创文章 · 获赞 1 · 访问量 1771

猜你喜欢

转载自blog.csdn.net/qq_42039738/article/details/103922254