springMvc中的拦截器【巩固】

先实现下想要的拦截器功能

springMvc中的拦截器【巩固】_第1张图片

package com.hmdp.utils;

import com.hmdp.entity.User;
import org.springframework.web.servlet.HandlerInterceptor;

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


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
        HttpSession session = request.getSession();
        Object user = session.getAttribute("user");
        if(user==null)
        {
            //不存在,拦截,返回401状态码
            response.setStatus(401);
            return false;
        }
        //保存信息到ThreadLocal
        UserHolder.saveUser((User) user);

        return true;
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        //移除用户
        UserHolder.removeUser();
    }
}

配置拦截器:

springMvc中的拦截器【巩固】_第2张图片

/**
 * 拦截器
 */
@Configuration
public class MvcConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor())
                .excludePathPatterns(
                        "/blog/hot",
                        "/user/code",
                        "user/login"
                );
    }
}

 @Configuration:当使用`@Configuration`注解标记一个类时,它表示该类是一个配置类,用于定义和配置Spring应用程序的组件和相关配置。

WebMvcConfigurer :是Spring MVC中的一个接口,它允许开发者自定义Spring MVC的某些特性。如果你想自定义Spring MVC而不是完全采用默认配置,那么你可以实现WebMvcConfigurer接口。例如,如果你想更改默认的视图解析器、消息转换器、拦截器等,你可以通过实现WebMvcConfigurer接口来完成。

.excludePathPatterns:这些接口不走拦截

.addInterceptor :是 WebMvcConfigurer 接口中的一个方法,它允许你添加自定义的拦截器(Interceptor)到 Spring MVC 的处理流程中。拦截器可以用于在请求处理之前或之后执行特定的逻辑,例如身份验证、日志记录、性能监控等。

你可能感兴趣的:(java)