You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在线书店项目GET请求403,控制器未调用问题求助

解决GET请求返回403且未触发控制器的问题

核心原因分析

403 Forbidden错误且请求未到达控制器,90%以上是安全拦截导致——你的请求被Spring Security或自定义过滤器提前拦截,没有进入控制器处理流程。

解决方案步骤

1. 调整安全框架配置(重点)

如果项目使用Spring Security,默认会拦截所有HTTP请求并要求认证,需明确放行/api/v1/books/search端点:

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -> auth
                // 放行书籍搜索接口
                .requestMatchers(HttpMethod.GET, "/api/v1/books/search").permitAll()
                // 其他接口按需配置权限规则
                .anyRequest().authenticated()
            )
            // 纯后端API场景可关闭CSRF防护
            .csrf(csrf -> csrf.disable());
        return http.build();
    }
}

如果是自定义过滤器拦截了请求,检查过滤器逻辑,调整拦截规则,避免误拦截该GET请求。

2. 修复仓库SQL语法问题(提前规避后续错误)

当前原生SQL的LIKE写法存在语法错误,解决权限问题后会触发SQL异常,需用CONCAT拼接通配符:

@Repository
public interface BooksRepository extends JpaRepository<Books,Long> {

    Optional<Books> findById(Long id);

    @Query(value = "SELECT b FROM books b WHERE b.title LIKE CONCAT('%', :query, '%')",nativeQuery = true)
    List<Books> searchBookByTitle(String query);

    @Query(value = "SELECT b FROM books b WHERE b.genre LIKE CONCAT('%', :query, '%')",nativeQuery = true)
    List<Books> searchBookByGenre(String query);
    
    @Query(value = "SELECT b FROM books b inner join books_and_authors bas on b.id = bas.book_id " +
            "inner join authors a on bas.author_id = a.id WHERE a.name LIKE CONCAT('%', :query, '%')",nativeQuery = true)
    List<Books> searchByAuthor(String query);
}

3. 验证请求合法性

确认Postman中的请求地址完全匹配:http://localhost:8080/api/v1/books/search?query=Tolstoy,检查是否存在拼写错误、大小写不一致等问题。


内容的提问来源于stack exchange,提问作者Kai7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 13:07:31