春季安全性:维护中的POST结果为405

时间:2020-01-09 13:11:50

标签: spring-boot spring-security

我们通过配置HttpSecurity来实现这样的维护模式。

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
            .authorizeRequests()
            .antMatchers(publicResources).permitAll()
            .antMatchers("/config/**","/config").hasRole("ADMIN")

            /*--- Mainenance mode ---*/
            .requestMatchers(request -> systemManagement.inMaintenance()).hasRole("ADMIN")

            .anyRequest().hasRole("USER")
            .and()
            .exceptionHandling()
            .accessDeniedHandler((request, response, accessDeniedException) ->
                    accessDeniedHandler().handle(request, response, accessDeniedException)
               )
            .and()
            .formLogin().loginPage("/login").permitAll()
            .and()
            .logout().permitAll()
            .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
    ;
}


@Bean
public AccessDeniedHandler accessDeniedHandler() {
    AccessDeniedHandlerImpl defaultAccessDeniedHandler = new AccessDeniedHandlerImpl();
    defaultAccessDeniedHandler.setErrorPage("/login?error");
    return defaultAccessDeniedHandler;
}

现在,在维护处于活动状态时,普通用户现在可以将GET请求重定向到登录名。那是预期的结果。但是,普通用户的POST请求在维护期间导致405(不允许使用方法)。

我注意到csrf保护处于活动状态,并且405经常是由于Spring Boot中缺少csrf令牌导致的。可以在授权之前检查csrf吗?如果是这样,我可以更改吗?还是完全不同的问题?

0 个答案:

没有答案