Spring Security配置问题:如何放行/admin/auth/**并保护/admin/**?
问题解决:调整Spring Security路径匹配顺序
你的配置不生效的核心原因是路径匹配规则的顺序错误:Spring Security的授权规则是从上到下依次匹配,当请求是/admin/auth/login这类路径时,会先匹配到/admin/**的规则(要求认证),后面的/admin/auth/**放行规则根本不会被执行。
修改后的配置
@Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests((requests) -> requests // 先配置更具体的路径,放行登录相关接口 .requestMatchers("/admin/auth/**").permitAll() // 再配置宽泛的/admin/**路径,要求认证 .requestMatchers("/admin/**").authenticated() // 其他路径全部放行 .anyRequest().permitAll() ); // 修正CSRF忽略路径的斜杠,避免匹配异常 http.csrf(c -> c.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()) .ignoringRequestMatchers("/admin/**")); http.addFilterBefore(jwtTokenFilter, UsernamePasswordAuthenticationFilter.class); return http.build(); }
关键说明
- 规则顺序优先级:必须将更具体的路径规则放在前面,宽泛的路径规则放在后面,确保精准匹配的规则先被触发。
- CSRF配置修正:原代码中
ignoringRequestMatchers("admin/**")少了开头的斜杠,会导致路径匹配不准确,修正为"/admin/**"。
内容的提问来源于stack exchange,提问作者Never_se
相关产品推荐
相关产品推荐

