springboot使用拦截器

目录

步骤介绍:

思路:

实现:

总结:


步骤介绍:

        1)定义一个拦截器,实现HandlerInterceptor接口

        2)创建一个配置类,(相当于在Springmvc配制文件中使用mvc:interceptor接口)

思路:

用户通过从地址栏发起请求,在服务器接受请求之前,我们需要一个Interceptor类,该类中注册规定哪些请求需要进行拦截,哪些不需要拦截.我们可以在这之前先把拦截器写好(也就是如果发生了拦截后重定向到哪里,这个问题),回到Interceptor这个类中,通过方法实现设置哪些请求需要拦截,那些不需要拦截即可.

实现:

1)控制器类

package com.bjpowernode.springboot.web;

import com.bjpowernode.springboot.model.Student;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;

@org.springframework.stereotype.Controller
@RequestMapping(value="/user")
public class Controller {

    @ResponseBody
    @RequestMapping(value="/login")
    public Object login(HttpServletRequest request) {
        Student student=new Student("zhsan",14);
        request.getSession().setAttribute("student",student);
        return "login successfully";
    }

    @ResponseBody
    @RequestMapping(value="/center")
    Object center()
    {
        return "see the center";
    }

    @ResponseBody
    @RequestMapping(value="/out")
    Object out()
    {
        return "out see anytime";
    }

    @ResponseBody
    @RequestMapping(value="/error")
    public Object error()
    {
        return "error";
    }

}

注意我们的验证手段:在login请求中往session中存入一个键值对,然后再在 Interceptor类中取出判断是否有这个键值对的key

2)Interceptor类

该类中规定了判断逻辑(  "1)"  中有),如果取到了就返回true,未取到就先重定向,再返回false

package com.bjpowernode.springboot.interceptor;
import com.bjpowernode.springboot.model.Student;
import org.apache.catalina.User;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import sun.misc.Request;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class StudentInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        Student student= (Student) request.getSession().getAttribute("student");
        if(null==student)
        {
            response.sendRedirect(request.getContextPath()+"/user/nologin");
            return false;
        }

        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 {

    }
}

3)设置拦截中心类,该类中规定了拦截的范围,哪些需要拦截,哪些不需要拦截.

package com.bjpowernode.springboot.config;

import com.bjpowernode.springboot.interceptor.StudentInterceptor;
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 InterceptorConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        String[] addPath={
            "/user/**"
        };
        String[] excPath={
            "/user/login","/user/error","/user/out"
        };

        registry.addInterceptor(new StudentInterceptor()).addPathPatterns(addPath).excludePathPatterns(excPath);
    }
}

总结:

是什么?

为什么?

怎么办?

        1)设置拦截逻辑,被拦截了发向哪里?

        2)设置拦截中心,规定自己要拦截哪些请求?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Shallow_Carl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值