【第四十章】Spring Boot 自定义拦截器

1.首先编写拦截器代码

package com.sarnath.interceptor;

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

import org.springframework.stereotype.Service;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import com.sarnath.constants.Constants;
import com.sarnath.controller.BaseController;
import com.sarnath.dto.output.UserOutput;

/**
 * 自定义拦截器
 * @Description
 * @author Sunny
 * @date 2018年1月15日
 */
@Service
public class CustomerInterceptor extends BaseController implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String url = request.getRequestURI().substring(1,request.getRequestURI().length()-1);

        /**登录和退出登录不做拦截*/
        if(noLoginUrl.contains(url)){
            return true;
        }
        //判断用户是否已登录
        UserOutput user = getLoginUser(request, response);
        if(user == null || user.getUserId() == null){
            response.sendRedirect("/index");
            return false;
        }
        //判断当前用户请求路径是否拥有对应权限
        boolean allowRequesst = false;
        if(user.getUserType() == Constants.USER_TYPE_ADMIN){
            if(adminUrl.contains(url)){
                allowRequesst = true;
            }
        }else if(user.getUserType() == Constants.USER_TYPE_TEACHER){
            if(teacherUrl.contains(url)){
                allowRequesst = true;
            }
        }else if(user.getUserType() == Constants.USER_TYPE_STUDENT){
            if(studentUrl.contains(url)){
                allowRequesst = true;
            }
        }
        if(allowRequesst){
            return allowRequesst;
        }

        //默认跳转到登录页面
        response.sendRedirect("/index");
        return false;
    }

    @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 {

    }

}

2.将拦截器增加到Spring Boot配置中

package com.sarnath.config;

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.WebMvcConfigurerAdapter;

import com.sarnath.interceptor.CustomerInterceptor;

@Configuration
public class InterceptorConfig extends WebMvcConfigurerAdapter {
    @Autowired
    private CustomerInterceptor interceptor;
    /**
     * 添加拦截器到Spring Boot配置中
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(interceptor).addPathPatterns("/**");
    }
}

Ok,只需要这两部,设置好方法或路径的拦截业务逻辑即可

原文地址:https://www.cnblogs.com/sunny3096/p/8287664.html

时间: 2024-10-08 05:56:44

【第四十章】Spring Boot 自定义拦截器的相关文章

Spring boot 自定义拦截器

1.新建一个类实现HandlerInterceptor接口,重写接口的方法 1 package com.zpark.interceptor; 2 3 import com.zpark.tools.Constants; 4 import com.zpark..tools.utils.EmptyUtils; 5 import org.slf4j.Logger; 6 import org.slf4j.LoggerFactory; 7 import org.slf4j.MDC; 8 import org

Spring Boot之拦截器与过滤器(完整版)

作者:liuxiaopeng 链接:http://www.cnblogs.com/paddix 作者:蓝精灵lx原文:https://blog.csdn.net/liuxiao723846/article/details/80656492 参考以上两位作者文章链接进行实验整合,仅供学习交流 一.拦截器与过滤器 先理解一下AOP的概念,AOP不是一种具体的技术,而是一种编程思想. 在面向对象编程的过程中,我们很容易通过继承.多态来解决纵向扩展. 但是对于横向的功能,比如,在所有的service方法

SpringMVC(四)-- 文件下载、自定义拦截器、异常处理

1.文件下载 用ResponseEntity<byte[]> 返回值完成文件下载 具体参见本博客之前的<文件上传下载> @RequestMapping(value="/testResponseEntity") public ResponseEntity<byte[]> testResponseEntity(HttpServletRequest request) throws Exception{ ServletContext servletConte

Spring Boot整合拦截器

过滤器和监听器都属于Servlet 的api,还可以使用 Spring 提供的拦截器(HandlerInterceptor)进行改更精细的控制. 原文地址:https://www.cnblogs.com/natian-ws/p/10823072.html

spring boot 配置拦截器验证使用 token 登录

1.自定义登录注解 package io.xiongdi.annotation; import java.lang.annotation.*; /** * @author wujiaxing * @date 2019-07-12 * 登录校验 */ @Target(ElementType.METHOD) @Documented @Retention(RetentionPolicy.RUNTIME) public @interface Login { } 2.创建 token 实体类 packag

spring boot 添加拦截器

构建一个spring boot项目. 添加拦截器需要添加一个configuration @Configuration @ComponentScan(basePackageClasses = Application.class, useDefaultFilters = true) public class ServletContextConfig extends WebMvcConfigurationSupport { 为了方便扫描位置,我们可以写一个接口或者入口类Application放置于最外

(021)Spring Boot之拦截器HandlerInterceptor

 拦截器的使用步骤: 第一步,实现HandlerInterceptor接口,该接口有三个方法preHandle .postHandle .afterCompletion (1)preHandle在controller执行之前调用 (2)postHandle在controller执行之后,页面渲染之前调用 (3)afterCompletion在页面渲染之后调用,一般用于资源清理操作 第二步,继承WebMvcConfigurationSupport或者实现WebMvcConfigurer,重写他们的

【Spring Boot】Spring Boot之自定义拦截器

一.拦截器的作用 将通用的代码抽取出来,达到复用的效果.比如可以用来做日志记录.登录判断.权限校验等等 二.如何实现自定义拦截器 1)创建自定义拦截器类并实现HandlerInterceptor类 /** * @author zhangboqing * @date 2019-07-28 */ public class MyInterceptor implements HandlerInterceptor { /** * 执行Controller方法之前,调用 */ @Override publi

spring mvc &lt;mvc:annotation-driven/&gt; 自定义拦截器不走

<mvc:annotation-driven/> 这个便签会注册2个自定义拦截器,所以导致请求过来就会自己去走注册的这2个拦截器和定义的一堆bean 但是这个便签是必须得定义的 直接贴代码吧 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context=&qu