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

Spring Security项目入口URL添加项目名后返回404是什么原因?

问题原因

  • 未配置项目全局上下文路径:Spring Boot项目默认的请求根路径为/,你没有配置/pojoname作为全局前缀的话,服务端没有对应/pojoname/login的路由映射,访问时自然返回404。
  • Spring Security配置未适配路径前缀:如果你已经配置了全局上下文路径,但登录页配置、路径放行规则没有适配前缀规则,也会出现路径不匹配的问题。

解决方法

根据你的需求选择以下两种方案即可:

方案一:配置全局上下文路径(适合整个项目所有接口都需要带/pojoname前缀的场景)

  1. 在项目配置文件中添加上下文路径配置:
    • 如果你用application.properties,添加:
      server.servlet.context-path=/pojoname
      
    • 如果你用application.yml,添加:
      server:
        servlet:
          context-path: /pojoname
      
  2. 该配置生效后,Spring Boot会自动为所有接口、视图路径拼接/pojoname前缀,你现有Spring Security配置无需修改,直接访问http://localhost:8099/pojoname/login即可正常访问。

    注意:如果你的登录页表单提交action硬编码写死了/login,需要改为相对路径login,如果使用Thymeleaf模板则改为@{/login},让框架自动拼接上下文路径。

方案二:仅修改登录相关路径(适合只有登录路径需要带/pojoname前缀,其他接口不需要的场景)

不需要修改全局配置,直接调整Spring Security的路径规则即可:

@Override
protected void configure(HttpSecurity http) throws Exception {
      http
        .csrf().disable()
        .authorizeRequests()
        .requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll()
        // 放行带前缀的登录路径
        .antMatchers("/pojoname/login").permitAll()
        .antMatchers("/register", "/registration", "/editProfile").permitAll()
        .anyRequest().authenticated()
        .and()
        .formLogin()
            // 登录页路径修改为带前缀的路径
            .loginPage("/pojoname/login").permitAll()
            .usernameParameter("email")
        .and()
        .logout()
            .permitAll();
}

修改完成后,同步将登录页对应的Controller路由调整为/pojoname/login即可。

内容的提问来源于stack exchange,提问作者Faheem azaz Bhanej

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 22:12:01