1、创建一个普通的web工程。

srpingboot拦截器-LMLPHP

srpingboot拦截器-LMLPHP

 2、先创建需要的基础文件,比如一个用户类。

package com.example.mode;

public class User {
    private Integer id;
    private String name;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

再创建一个监听类,这个类继承自HandlerInterceptor,然后,在这个类里就可以处理一些监听到的信息,比如有的登陆,有的没有登陆。

package com.example.interceptor;

import com.example.mode.User;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

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

public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //这里编写拦截规则,可以从session中获取用户信息,这个名为user的attribute对象如果为空,就返回error,因为没有登陆
//        如果这个对象存在,就返回true,不做任何处理。
        User user= (User) request.getSession().getAttribute("user");
        if(user==null) {
            response.sendRedirect(request.getContextPath()+"/user/error");
            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 {

    }
}

这里还要建一个监听配置类,这个配置类来决定监听的对象集合,监听的类型,这里主要是监听web网页,所以,还要实现一个

WebMvcConfigurer接口,然后重写这个接口里的addInterceptor程序,把上面的MyInterceptor监听类,添加到web网页监听中去。
package com.example.config;

import com.example.interceptor.MyInterceptor;
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 MyInterceptorConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //要拦截的路径集合
        String[] addPathPatterns={"/user/**"};
        //要排除的路径集合
        String[] excludePathPatterns={"/user/out","/user/error","/user/login"};
        //将规则集合添加到注册中
        registry.addInterceptor(new MyInterceptor())
                .addPathPatterns(addPathPatterns)
                .excludePathPatterns(excludePathPatterns);
    }
}

这些工作都做完了,现在可以去编写控制类了,

package com.example.control;

import com.example.mode.User;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;

//这个注释是表明这个类是一个Controller,还有就是以下所有方法都带ResponseBody
@RestController
//这里是为了方便,以后所有的指向都会默认指向/user/后面的路径了
@RequestMapping("/user")
public class MyController {
//    以下为登陆方法,在里面可以检查登陆信息,然后填充request对象,再定向到需要的页面。
    @RequestMapping("/login")
    public Object login(HttpServletRequest request){
        User user=new User();
        user.setId(1001);
        user.setName("翠花");
        request.getSession().setAttribute("user",user);
        return "登陆成功";
    }
//    登陆成功以后,定位到用户中心页面
    @RequestMapping("/center")
    public Object center(HttpServletRequest request){
        User user=(User) request.getSession().getAttribute("user");
        return "欢迎编号为:"+user.getId()+"  用户:"+user.getName();
    }
//    没有登陆的用户访问的内容
    @RequestMapping("/out")
    public Object out(){
        return "普通用户访问页面";
    }
//    当非登陆用户访问到某些页面时会定向到出错页面。
    @RequestMapping("/error")
    public Object error(){
        return "请登陆后再访问,谢谢!";
    }
}

然后就可以直接运行了。

05-08 12:49