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)));
    }
}
相关推荐
考虑考虑1 分钟前
使用jpa中的group by返回一个数组对象
spring boot·后端·spring
十一0829934 分钟前
【PDF-XSS攻击】springboot项目-上传文件-解决PDF文件XSS攻击
spring boot·pdf·xss
GiraKoo10 分钟前
【GiraKoo】C++11的新特性
c++·后端
MO2T15 分钟前
使用 Flask 构建基于 Dify 的企业资金投向与客户分类评估系统
后端·python·语言模型·flask
云动雨颤22 分钟前
Java并发性能优化|读写锁与互斥锁解析
java
光溯星河23 分钟前
【实践手记】Git重写已提交代码历史信息
后端·github
ldj202035 分钟前
Centos 安装Jenkins
java·linux
PetterHillWater41 分钟前
Trae中实现OOP原则工程重构
后端·aigc
hqxstudying42 分钟前
Intellij IDEA中Maven的使用
java·maven·intellij-idea
圆滚滚肉肉44 分钟前
后端MVC(控制器与动作方法的关系)
后端·c#·asp.net·mvc