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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值