Spring Boot 在访问索引时不会将未经身份验证的用户重定向到登录页面

问题描述 投票:0回答:1

我正在开发一个使用基于表单的登录和一些 OAuth2 集成(GitHub 和 Google 登录)的 Web 应用程序,尽管问题不在于身份验证方法本身,而在于 Spring 中的授权请求

SecurityFilterChain

我有以下 Spring Boot 安全配置:

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    http
            // Explicitly enable form login and specify the login page to be mapped at "/login"
            .formLogin(form -> form.loginPage("/login").permitAll())
            .oauth2Login(form -> form.loginPage("/login").permitAll())
            .logout((logout) -> logout.logoutUrl("/logout").logoutSuccessUrl("/").permitAll())

            // Specify required authentication levels for URL mappings
            .authorizeHttpRequests(authorize -> authorize
                    .requestMatchers("/login/**").anonymous()
                    .requestMatchers("/register/**").anonymous()
                    .requestMatchers("/events/**").authenticated()
                    .requestMatchers("/").authenticated()
                    .anyRequest().permitAll());

    return http.build();
}

...我明确允许未经身份验证的用户向我的 Web 应用程序的每个端点发送请求,除了事件页面 (

/events/**
) 和索引页面(可在端点
/
获得)。索引页位于
localhost:8080

但是,当我没有登录我的网络应用程序时,我仍然可以访问索引页面,控制器会自动将我重定向到控制器中定义的模板(我觉得不需要在这里包含其他代码,因为这对解决我的问题没有帮助)。

登录页面已正确定义,就好像我想显式拒绝某些其他端点一样,我会正确重定向到

localhost:8080/login
。在这种情况下,第三个定义的请求匹配器(
/events/**
)可以正常工作。

使用

/**
作为请求匹配器仍然无法解决问题。

我应该在当前的安全配置中更改什么,以便未经身份验证的用户在导航到索引

/login
端点时重定向到
/
页面?

spring spring-boot spring-security
1个回答
0
投票

Maby是因为这条线?

.logout((logout) -> logout.logoutUrl("/logout").logoutSuccessUrl("/").permitAll())
所以根据我的理解(抱歉迟到了)你允许每个人访问“/”

© www.soinside.com 2019 - 2024. All rights reserved.