首页 > 解决方案 > 不支持提供请求方法“POST”的 Spring 安全多重登录页面

问题描述

我检查了许多类似的问题,但无法解决我的问题。我有以下两个用于管理员和用户的 httpsecurity。

@EnableWebSecurity
public class SecurityConfiguration {

    @Configuration
    @Order(1)
    public static class AdminSecurityConfiguration extends WebSecurityConfigurerAdapter {
        @Override
        protected void configure(final HttpSecurity http) throws Exception {
            // @formatter:off
            http
                .antMatcher("/admin/**")
                .authorizeRequests()
                .antMatchers("/admin/**").hasAuthority("ROLE_ADMIN")
            .and()
                .formLogin()
                .loginPage("/admin-login")
                .loginProcessingUrl("/admin-login")
                .failureUrl("/admin-login?error")
                .defaultSuccessUrl("/admin/home")
            .and()
                .logout()
                .logoutUrl("/admin-logout")
                .logoutSuccessUrl("/admin-login?logout")
                .permitAll()
            .and()
                .csrf().disable();
            // @formatter:on
        }
    }

    @Configuration
    @Order(2)
    public static class UserSecurityConfiguration extends WebSecurityConfigurerAdapter {
        @Override
        protected void configure(final HttpSecurity http) throws Exception {
            // @formatter:off
            http
                .antMatcher("/user/home/**")
                .authorizeRequests()
                .antMatchers("/user/home/**").hasAuthority("ROLE_USER")
                .anyRequest().authenticated()
            .and()
                .formLogin()
                .loginPage("/user-login")
                .loginProcessingUrl("/user-login")
                .failureUrl("/user-login?error")
                .defaultSuccessUrl("/user/home")
            .and()
                .logout()
                .logoutUrl("/user-logout")
                .logoutSuccessUrl("/user-login?logout")
            .and()
                .csrf().disable();
            // @formatter:on
        }
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Bean
    public UserDetailsService userDetailsService() {
        User.UserBuilder users = User.builder();
        InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
        manager.createUser(users.username("user").password(passwordEncoder().encode("user")).roles("USER").build());
        manager.createUser(users.username("admin").password(passwordEncoder().encode("admin")).roles("USER", "ADMIN").build());
        return manager;
    }

}

每当我尝试登录管理员或用户端时,都会收到以下错误。

2021-03-11 16:46:31.357  WARN 1468 --- [nio-8080-exec-3] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported]

任何帮助深表感谢。

这是重现问题的仓库。 https://github.com/venustulips/ss-2-login

标签: javaspring-bootspring-mvcspring-security

解决方案


推荐阅读