springboot拦截器

springboot拦截器

springboot拦截器可以拦截指定请求,功能和servlet的过滤器类似,不过优先级比过滤器低。

springboot拦截器步骤:

  1. 添加springboot依赖和springMvc依赖
  2. 创建拦截器类
    新建一个类实现HandlerInterceptor 接口并通过@Component注解添加到spring容器中,并重写preHandle方法,在perHandle方法内设置拦截逻辑
package com.kun.interceptor;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.kun.entity.User;
import com.kun.vo.AjaxReturn;
import org.apache.jasper.tagplugins.jstl.core.Out;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
@Component
public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        User user = (User) request.getSession().getAttribute("user");
        if(user != null){
            //有登陆,放行
            return true;
        }
        //没有登陆判断是Ajax请求还是普通请求
        if(!isAjax(request)){
            //不是Ajax请求,返回页面
            response.sendRedirect(request.getContextPath()+"/");
        }else{
            //是Ajax请求,返回json
            response.setCharacterEncoding("utf-8");
            response.setContentType("application/json");
            //创建返回的对象
            AjaxReturn ajaxReturn = new AjaxReturn();
            ajaxReturn.setCode(1002);
            ajaxReturn.setMsg("请先登陆");
            //将对象转为json
            ObjectMapper objectMapper = new ObjectMapper();
            String json = objectMapper.writeValueAsString(ajaxReturn);
            PrintWriter out = response.getWriter();
            out.write(json);
            out.flush();
            out.close();
        }
        return false;
    }

    /**
     * 判断是否是Ajax请求
     * @param request
     * @return true是Ajax请求
     */
    public boolean isAjax(HttpServletRequest request){
        if(request.getHeader("x-requested-with") != null && request.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")){
            return true;
        }else{
            return false;
        }
    }
}

  1. 注册拦截器
    创建一个配置类实现WebMvcConfigurer并添加Configuration注解,并重写addInterceptors方法,在addInterceptors方法中添加拦截器
package com.kun.config;
import com.kun.interceptor.LoginInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Autowired
    private LoginInterceptor loginInterceptor;
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //注册拦截器
        //loginInterceptor拦截器对象,addPathPatterns添加拦截请求,excludePathPatterns设置不拦截的请求
        //  " /** "拦截根下的所有子孙, “ /* ” 只拦截所有子
        registry.addInterceptor(loginInterceptor).addPathPatterns("/**").excludePathPatterns("/","/login");
    }
}

这样一个登陆拦截器就添加成功了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值