Spring Security环境下JS加载返回302状态问题求助
问题原因及解决方案
核心问题:静态资源未被Spring Security正确放行
你的MvcConfig配置了/static/**映射到classpath:/static/,但Spring Security的requestMatchers里只放行了/resources/**,导致浏览器请求JS文件时被Security拦截,触发重定向到登录页(返回302状态码)。Postman能正常请求REST接口是因为/add和/listOfUsers已经被放行,但静态资源请求没被允许。
解决方案步骤
1. 修正Spring Security的静态资源放行规则
修改WebSecurityConfig中authorizeHttpRequests的requestMatchers,把/resources/**替换为/static/**:
@Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .csrf().disable() .authorizeHttpRequests((requests) -> requests // 替换/resources/**为/static/**,匹配静态资源路径 .requestMatchers("/", "/welcome", "/registration", "/admin", "/static/**", "/add", "/listOfUsers" ).permitAll() .anyRequest().authenticated() ) .formLogin((form) -> form .loginPage("/login") .permitAll() ) .logout((logout) -> logout.permitAll()); return http.build(); }
2. 确保HTML页面中JS的引用路径正确
比如你的JS文件放在src/main/resources/static/js/xxx.js,那么HTML中应该这样引用:
<script src="/static/js/xxx.js"></script>
路径要和MvcConfig中配置的/static/**对应。
3. 修复BackendController的依赖注入问题
你的passwordEncoder没有添加@Autowired注解,会导致调用passwordEncoder.encode()时出现空指针异常,需要补充注入:
@RestController public class BackendController { @Autowired private UserRepository userRepository; // 添加@Autowired注入PasswordEncoder @Autowired private PasswordEncoder passwordEncoder; // 其余代码不变... }
4. 额外优化:统一静态资源路径匹配(可选)
如果习惯用/resources/**作为静态资源访问路径,可以修改MvcConfig的addResourceHandlers,保持和Security配置一致:
@Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry .addResourceHandler("/resources/**") .addResourceLocations("classpath:/static/"); }
同时HTML中引用路径改为/resources/js/xxx.js,这样也能解决问题,选一种统一的路径规则即可。
内容的提问来源于stack exchange,提问作者minby
相关产品推荐
相关产品推荐

