springboot中如何指定某些接口不被拦截

 更新时间:2024年11月17日 15:14:23   作者:程序修理员  
这篇文章主要为大家详细介绍了springboot中如何指定某些接口不被拦截,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

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

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

以下是实现这一目标的一般步骤:

1)定义拦截器:

@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)配置拦截器:

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

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:

/**
 * 认证失败处理类 返回未授权
 *
 * @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)));
    }
}

到此这篇关于springboot中如何指定某些接口不被拦截的文章就介绍到这了,更多相关springboot指定接口不被拦截内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于JavaMail实现邮件发送

    基于JavaMail实现邮件发送

    这篇文章主要为大家详细介绍了基于JavaMail实现邮件发送功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • spring boot利用docker构建gradle项目的实现步骤

    spring boot利用docker构建gradle项目的实现步骤

    这篇文章主要给大家介绍了关于spring boot利用docker构建gradle项目的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用spring boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2018-05-05
  • SpringBoot整合Redisson的两种方式

    SpringBoot整合Redisson的两种方式

    这篇文章主要介绍了Spring Boot整合Redisson的两种方式,方式一直接使用yml配置,方式二创建RedissonConfig配置类,文中通过代码示例讲解的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2024-04-04
  • SpringBoot优雅捕捉异常的两种方法小结

    SpringBoot优雅捕捉异常的两种方法小结

    SpringBoot框架对异常的处理提供了几种很强大的方法,我们可以通过@ControllerAdvice和@ExceptionHandler注解实现全局异常的处理,下面就来介绍一下这两种方法的实现,感兴趣的可以了解一下
    2024-08-08
  • Spring中filter过滤器的定义方法

    Spring中filter过滤器的定义方法

    这篇文章主要介绍了Spring中filter过滤器的定义方法,Filter 程序是一个实现了特殊接口的 Java 类,与 Servlet 类似,也是由 Servlet 容器进行调用和执行的,需要的朋友可以参考下
    2023-08-08
  • IDEA报错:java:无效的源发行版21解决方式

    IDEA报错:java:无效的源发行版21解决方式

    这篇文章主要给大家介绍了关于IDEA报错:java:无效的源发行版21的解决方式,这个错误是因为你的项目使用的Java版本与你的IDEA使用的Java版本不一致导致的,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2024-06-06
  • 使用java代码实现一个月内不再提醒,通用到期的问题

    使用java代码实现一个月内不再提醒,通用到期的问题

    这篇文章主要介绍了使用java代码实现一个月内不再提醒,通用到期的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • 解决idea2020.1找不到程序包和符号的问题

    解决idea2020.1找不到程序包和符号的问题

    这篇文章主要介绍了解决idea2020.1找不到程序包和符号的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • SpringBoot设置HTTP代理访问

    SpringBoot设置HTTP代理访问

    本文主要介绍了SpringBoot在私有服务器通过代理访问公网的配置方法,涉及WebClient和RestTemplate两种客户端的代理设置,帮助实现跨服务器网络请求
    2025-06-06
  • MybatisPlus中的save方法详解

    MybatisPlus中的save方法详解

    save方法是Mybatis-plus框架提供的一个添加记录的方法,它用于将一个实体对象插入到数据库表中,这篇文章主要介绍了MybatisPlus中的save方法,需要的朋友可以参考下
    2023-11-11

最新评论