尽管我们不提供 Spring Security 配置,为啥 Spring Security 应用程序会重定向到登录页面?

Posted

技术标签:

【中文标题】尽管我们不提供 Spring Security 配置,为啥 Spring Security 应用程序会重定向到登录页面?【英文标题】:Why Spring Security application redirects to login page though we don't provide spring security configuration?尽管我们不提供 Spring Security 配置,为什么 Spring Security 应用程序会重定向到登录页面? 【发布时间】:2019-10-05 08:32:19 【问题描述】:

我没有提供任何 Spring Security 配置和重定向到登录页面的每个请求 URL。我已经使用带有所需 Spring Security 依赖项的“Spring Initializr”创建了一个 Spring Boot 应用程序。

为什么它将每个请求都重定向到登录页面?如何禁用此功能?

我试过删除所有安全配置。

@SpringBootApplication
public class SpringbootJwtExampleApplication 

    public static void main(String[] args) 
        SpringApplication.run(SpringbootJwtExampleApplication.class, args);
    



public interface VehicleRepository extends JpaRepository<Vehicle, Long> 



@Data
@Entity
public class Vehicle 

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;



@RestController
@RequestMapping("/v1/vehicles")
public class VehicleController 

    @Autowired
    private VehicleRepository vehicleRepository;

    @GetMapping("")
    public ResponseEntity getAll()
        return ok(vehicleRepository.findAll());
    

当我请求http://localhost:8080/v1/vehicles 它重定向到登录页面。它应该请求实际请求。

【问题讨论】:

移除 Spring Security?唯一的另一种方法是正确配置它,而不是让它加载默认值。 @Vikas 你可能需要移除安全依赖 Spring Boot 2.0.x disable security for certain profile的可能重复 【参考方案1】:

根据Spring Security documentation,WebSecurityConfigurerAdapter 类提供以下默认配置:

protected void configure(HttpSecurity http) throws Exception 
    http
        .authorizeRequests()
            .anyRequest().authenticated()
            .and()
        .formLogin()
            .and()
        .httpBasic();

要覆盖这些默认值,请编写您自己的WebSecurityConfig,例如:

@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter 
    @Override
    protected void configure(HttpSecurity http) throws Exception 
        // Your own rules
    

【讨论】:

【参考方案2】:

如果你想禁用临时 spring 安全,请在你的 spring 主类中添加注解 @SpringBootApplication(exclude = SecurityAutoConfiguration.class)

@SpringBootApplication(exclude = SecurityAutoConfiguration.class)
public class DemoApplication

public static void main(String[] args)

    SpringApplication.run(DemoApplication.class, args);


另一种解决方案是通过扩展 类

@Configuration
@EnableWebSecurity
public class BasicConfiguration extends WebSecurityConfigurerAdapter 
@Override
protected void configure(HttpSecurity http) throws Exception 
  //customize the configs


最后,如果你的项目不需要安全,把pom.xml文件中的spring安全依赖去掉。

【讨论】:

以上是关于尽管我们不提供 Spring Security 配置,为啥 Spring Security 应用程序会重定向到登录页面?的主要内容,如果未能解决你的问题,请参考以下文章

尽管 authorizeRequests().anyRequest().permitAll() spring-security 返回 401

尽管有 SecurityConfig,但 Spring Security 会阻止 POST 请求

spring mvc集成spring security 案例

Spring-Security:使用 CORS Preflights 获得 401(尽管 http.cors())

Spring Security-2-表单认证

Spring security invalid-session-url 的坑(配了permitAll仍然跳转到登录页)