Spring拦截器,实现

刚做Java不久,写个拦截器,以及现在用到的。

需求:登录拦截

原本是想用过滤器实现的,可是发现过滤器会把静态资源文件也过滤【因为我写的是过滤所有请求,会把登录的静态文件给过滤了,可能也能实现,但是没找到,又有点急】,因此用了拦截器实现,因为它可以排除资源请求的拦截

代码:

1:先写一个拦截器类 ,并实现接口  HandlerInterceptor

代码:

package com.jesse.config.interceptor;

import com.jesse.util.SessionUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

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

/**
 * 登陆拦截器
 */
@Slf4j
public class LoginInterceptor implements HandlerInterceptor {
    /**
     * 在请求被处理之前调用
     *
     * @param request
     * @param response
     * @param handler
     * @return
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 检查每个到来的请求对应的session域中是否有登录标识
        if (SessionUtil.getUserId(request) == null) {
            // 未登录,重定向到登录页
            response.sendRedirect("/login.page");
            return false;
        }
        String userName = SessionUtil.getUserId(request);
        log.info("当前用户已登录,登录的用户名为:{}", userName);
        return true;
    }

    /**
     * 在请求被处理后,视图渲染之前调用
     *
     * @param request
     * @param response
     * @param handler
     * @param modelAndView
     * @throws Exception
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    }


    /**
     * 在整个请求结束后调用
     *
     * @param request
     * @param response
     * @param handler
     * @param ex
     * @throws Exception
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}

 

2:把写好的拦截器注入

代码:

package com.jesse.config.interceptor;


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class InterceptorConfiguration implements WebMvcConfigurer{
    @Bean
    public LoginInterceptor loginInterceptor(){
        return new LoginInterceptor();
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 注册拦截器
        //LoginInterceptor loginInterceptor = new LoginInterceptor();
        InterceptorRegistration loginRegistry = registry.addInterceptor(loginInterceptor());
        // 拦截路径
        loginRegistry.addPathPatterns("/**");
        // 排除路径
        loginRegistry.excludePathPatterns("/");
        loginRegistry.excludePathPatterns("/login.page");
        loginRegistry.excludePathPatterns("/checklogin.page");
        // 排除资源请求
        loginRegistry.excludePathPatterns("/assets/**");
        loginRegistry.excludePathPatterns("/css/**");
        loginRegistry.excludePathPatterns("/fonts/**");
        loginRegistry.excludePathPatterns("/image/**");
        loginRegistry.excludePathPatterns("/js/**");
        loginRegistry.excludePathPatterns("/qrcode/**");
    }
}

 

写的不好勿怪,纯属新手!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring 拦截器是一种在 Spring MVC 请求处理过程中进行拦截的组件,它可以在请求到达控制器前或者返回响应前拦截请求并进行一些处理。拦截器可以被用来实现一些通用的功能,比如日志记录、权限控制、性能监控等等。 在 Spring MVC 中,拦截器是通过实现 HandlerInterceptor 接口来实现的。HandlerInterceptor 接口定义了三个方法,分别是 preHandle()、postHandle() 和 afterCompletion()。这些方法在请求处理过程中的不同阶段被调用,具体如下: 1. preHandle() 方法在请求到达控制器前被调用,可以用来进行一些前置处理,比如权限校验等。如果该方法返回 false,则请求处理流程会被打断。 2. postHandle() 方法在控制器处理完请求后、视图渲染前被调用,可以用来对请求处理结果进行一些后置处理,比如添加一些公共的模型数据等。 3. afterCompletion() 方法在整个请求处理完毕后被调用,可以用来进行一些清理工作,比如释放资源等。 在 Spring MVC 中,我们可以通过配置 Bean 实现拦截器的注册和配置。具体步骤如下: 1. 创建一个类,实现 HandlerInterceptor 接口,实现 preHandle()、postHandle() 和 afterCompletion() 方法。 2. 在 Spring 配置文件中配置该类为 Bean,比如: ``` <bean id="myInterceptor" class="com.example.MyInterceptor"/> ``` 3. 在 Spring MVC 配置文件中配置拦截器,比如: ``` <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/> <bean class="com.example.MyInterceptor"/> </mvc:interceptor> </mvc:interceptors> ``` 上面的配置表示将 MyInterceptor 拦截器应用于所有的请求路径。我们也可以通过 path 属性指定拦截器应用于具体的请求路径。 总的来说,Spring 拦截器是一种非常强大的组件,可以帮助我们实现很多通用的功能。掌握了拦截器的原理和使用方法,我们就可以更好地利用它来提高我们的开发效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值