springboot项目,指定某些接口不被拦截方法

1、监听器(Interceptor)拦截处理

在 Spring Boot应用中,如果你希望某些请求地址不被监听器(Interceptor)拦截处理,可以通过配置拦截器的路径来实现。拦截器通常用于在请求前后进行处理,比如权限验证、日志记录等,但有时候你可能希望某些请求可以跳过这些处理。

以下是实现这一目标的一般步骤:
1)定义拦截器:

java 复制代码
@Component
public class MyInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 在此处编写你的拦截逻辑
        // 返回 true 表示继续处理请求,返回 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 {
        // 在请求完成之后进行处理
    }
}

2)配置拦截器:

java 复制代码
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Autowired
    private MyInterceptor myInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(myInterceptor)
                .addPathPatterns("/**") // 拦截所有路径
                .excludePathPatterns("/public/**"); // 跳过 /public 下的路径
    }
}

addPathPatterns("/**") 表示拦截所有路径,而 excludePathPatterns("/public/**")

表示跳过以 /public/ 开头的路径,即不对这些路径应用拦截器逻辑。

2、绕过Spring Security 认证处理

在 Spring Security 中,AuthenticationEntryPoint 主要用于处理未经认证的请求,例如需要登录但用户未提供凭证时的处理逻辑。如果你希望某些接口请求不经过 AuthenticationEntryPoint 的认证处理,通常可以通过配置 Spring Security 的 HttpSecurity 来实现。

1)配置类中定义 HTTP Security:

java 复制代码
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/public/**").permitAll() // 允许访问的接口路径
                .anyRequest().authenticated() // 其他接口路径需要认证
            .and()
            .httpBasic()
                .authenticationEntryPoint(new MyAuthenticationEntryPoint()); // 设置自定义的认证入口点
    }
}

说明:

  • antMatchers("/public/**").permitAll() 指定了 /public/** 路径下的接口不需要认证,可以直接访问。
  • .anyRequest().authenticated() 告诉 Spring Security 其他所有请求都需要认证。
  • .httpBasic().authenticationEntryPoint(new MyAuthenticationEntryPoint()) 指定了自定义的 AuthenticationEntryPoint,你可以根据需要进行自定义逻辑,例如返回特定的错误信息或跳转页面。

2)自定义 AuthenticationEntryPoint:

java 复制代码
/**
 * 认证失败处理类 返回未授权
 *
 * @author dongxiajun
 */
@Component
public class AuthenticationEntryPointImpl implements AuthenticationEntryPoint, Serializable {
    private static final long serialVersionUID = -8970718410437077606L;

    @Override
    public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException e) {
        String msg = StringUtils.format("请求访问:{},认证失败,无法访问系统资源", request.getRequestURI());
        ServletUtils.renderString(response, JSON.toJSONString(AjaxResult.error(401, msg)));
    }
}
相关推荐
子兮曰5 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
小羊没烦恼!5 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
子兮曰5 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
俊昭喜喜里5 天前
java中的继承和多态的区别
java
小羊没烦恼!5 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
爱勇宝5 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
譕痕5 天前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码5 天前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖5 天前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
此时不提桶,更待何时5 天前
01-06-A-JVM排查实战详解
java·jvm