springboot13-拦截器
springboot使用拦截器:
1、定义一个拦截器,实现HandlerInterceptor接口
2、创建一个配置类(即:在SpringMVC配置文件中使用mvc:interceptor标签)
1、创建User实体类
public class User {
    private String name;
    private int age;
    public User() {
    }
    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
2、编写请求路径
@Controller
@RequestMapping("/user")
public class UserController {
    //用户登录的请求
    //该请求路径不需要用户登录也可访问
    @RequestMapping("/login")
    public @ResponseBody Object login(HttpServletRequest request){
        //将用户的信息存到session中
        User user = new User();
        user.setName("张三");
        user.setAge(15);
        request.getSession().setAttribute("user", user);
        return "Loign Success";
    }
    //该请求需要用户登录之后才可以访问
    @RequestMapping("/center")
    public @ResponseBody Object center(){
        return "See Centor Message";
    }
    //该请求不登录也可访问
    @RequestMapping("/out")
    public @ResponseBody Object out(){
        return "Out see anytime";
    }
    //如果该用户未登录访问了需要登录才可以访问的亲贵,之后会跳转到该请求路径
    //该请求路径不需要用户登录也可访问
    @RequestMapping("/error")
    public @ResponseBody Object error(){
        return "error";
    }
}
3、编写拦截器
public class UserInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //编写业务拦截的规则
        //从session中获取用户的信息
        User user = (User) request.getSession().getAttribute("user");
        if(user == null){
            //重定向
            System.out.println("123");
            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 {
    }
}
4、编写拦截器的配置类
@Configuration //定义此类为配置文件(即相当于之前的xml配置文件)
public class InterceptorConfig implements WebMvcConfigurer {
    //mvc:interceptors
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //那些路径被拦截
        String[] addPathPatterns = {
                "/user/**"
        };
        //那些路径被排除---不被拦截
        String[] excludePathPatterns = {
                "/user/out", "/user/error", "/user/login"
        };
        //mvc:interceptor  bean class=""
        //addPathPatterns:添加被拦截路径
        //excludePathPatterns:添加不被拦截的路径
        registry.addInterceptor(new UserInterceptor()).addPathPatterns(addPathPatterns).excludePathPatterns(excludePathPatterns);
    }
}
5、启动类启动
 
                    
                
 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号