java拦截器放行某些请求

本文详细介绍在SpringBoot中如何使用自定义拦截器实现登录验证,同时探讨两种排除特定请求的方法:通过配置excludePathPatterns和使用自定义注解UnAuthRequest。文章提供了具体的代码示例,展示如何创建拦截器并配置其排除规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在java开发中,拦截器使用是很普遍的,最常用的就是登陆拦截了,然后并不是所有的请求我们都需要拦截,比如index页面的请求我们是不拦截的.通常情况下我们有两种方式:先贴出来springboot使用拦截器的case:

1.自定义拦截器,实现HandlerInterceptor ,也可以采用继承的方式(HandlerInterceptorAdapter),内容不重要,看过程

public class LoginHandlerInterceptor implements HandlerInterceptor {

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        HttpSession session = request.getSession();
        String username = (String) session.getAttribute("username");
        if (StringUtils.isEmpty(username) || !Objects.equals("123456",username)) {
            request.setAttribute("msg","没有权限");
            request.getRequestDispatcher("/index.html").forward(request,response);
            return false;
        }else {
            return true;
        }
    }

    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
    }

    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
    }
}

2.配置我们自定义的拦截器

@Configuration
public class MyConfigurerAdapter extends WebMvcConfigurerAdapter {
 
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("*").excludePathPatterns("/index","/","/user/login");
        super.addInterceptors(registry);
    }
}

第一种方式就是使用interceptor的excludePatterns来去除我们不要验证的请求

第二种方式是使用注解的方式(虽然这个麻烦一点点,但是使用方便)

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface UnAuthRequest {
}

然后我们自己的拦截器就需要改一下

public class LoginHandlerInterceptor implements HandlerInterceptor {

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        HttpSession session = request.getSession();
        HandlerMethod handlerMethod = (HandlerMethod) handler;
        Method method = handlerMethod.getMethod();
        UnAuthRequest annotation = method.getAnnotation(UnAuthRequest.class);
        if (Objects.nonNull(annotation)) {
            return true;
        }
        String username = (String) session.getAttribute("username");
        if (StringUtils.isEmpty(username) || !Objects.equals("123456",username)) {
            request.setAttribute("msg","没有权限");
            request.getRequestDispatcher("/index.html").forward(request,response);
            return false;
        }else {
            return true;
        }
    }

    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
    }

    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
    }
}

这样的话,我们只需要将注解贴在我们不需要拦截的请求上就行了,使用起来很方便.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值