当前位置: 首页 > 知识库问答 >
问题:

Spring Security:多个HTTP配置不工作

魏翔
2023-03-14

我正在尝试使用Spring Security,我有一个用例,我想要保护不同的登录页面和不同的URL集。

下面是我的配置:

@Configuration
@Order(1)
public static class ProviderSecurity extends WebSecurityConfigurerAdapter{
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/", "/home").permitAll()
                .antMatchers("/admin/login").permitAll()
                .antMatchers("/admin/**").access("hasRole('BASE_USER')")
                .and()
            .formLogin()
                .loginPage("/admin/login").permitAll()
                .defaultSuccessUrl("/admin/home")
                .failureUrl("/admin/login?error=true").permitAll()
                .usernameParameter("username")
                .passwordParameter("password")
                .and()
            .csrf()                    
                .and()
            .exceptionHandling().accessDeniedPage("/Access_Denied");            
    }
}


@Configuration
@Order(2)
public static class ConsumerSecurity extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/consumer/login").permitAll()
                .antMatchers("/consumer/**").access("hasRole('BASE_USER')")
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .loginPage("/consumer/login").permitAll()
                .defaultSuccessUrl("/consumer/home")
                .failureUrl("/consumer/login?error=true").permitAll()
                .usernameParameter("username")
                .passwordParameter("password")
                .and().csrf()                
                .and()
            .exceptionHandling().accessDeniedPage("/Access_Denied");
    }
}

共有1个答案

吕向阳
2023-03-14

看看Spring Security参考:

@EnableWebSecurity
public class MultiHttpSecurityConfig {
  @Autowired
  public void configureGlobal(AuthenticationManagerBuilder auth) { 1
      auth
          .inMemoryAuthentication()
              .withUser("user").password("password").roles("USER").and()
              .withUser("admin").password("password").roles("USER", "ADMIN");
  }

  @Configuration
  @Order(1)                                                        2
  public static class ApiWebSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {
      protected void configure(HttpSecurity http) throws Exception {
          http
              .antMatcher("/api/**")                               3
              .authorizeRequests()
                  .anyRequest().hasRole("ADMIN")
                  .and()
              .httpBasic();
      }
  }    

  @Configuration                                                   4
  public static class FormLoginWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {

      @Override
      protected void configure(HttpSecurity http) throws Exception {
          http
              .authorizeRequests()
                  .anyRequest().authenticated()
                  .and()
              .formLogin();
      }
  }
}

1将身份验证配置为正常

2创建包含@orderWebSecurityConfigurerAdapter实例,以指定应首先考虑哪个WebSecurityConfigurerAdapter

未使用第二个配置,因为第一个配置与/**匹配(未配置antmatcher)。并且您的第一个配置仅限制/admin/**,则默认情况下允许使用所有其他URL。

 类似资料:
  • 问题内容: 我正在尝试使用Spring Security,并且有一个用例,其中我想保护不同的登录页面和不同的URL集。 这是我的配置: 这些类是具有注释的另一个类的内部类。 的安全性工作正常,但所有页面均未得到保护,登录页面未发生任何重定向。我搜索了其他答案,但没有一个有效。 问题答案: 看一下: 1正常配置身份验证 2创建一个包含的实例,以指定应首先考虑的对象。 3 r指出这仅适用于以开头的 4

  • 问题内容: 我正在尝试使用Spring Security,并且有一个用例,其中我想保护不同的登录页面和不同的URL集。 这是我的配置: 这些类是具有注释的另一个类的内部类。 的安全性工作正常,但所有页面均未得到保护,登录页面未发生任何重定向。我搜索了其他答案,但没有一个有效。 问题答案: 看一下Spring Security Reference: 1正常配置身份验证 2创建一个包含的实例,以指定应

  • 我开始学习在线教程,在我的单个本地VM上配置多个NDOE。以下是主节点上的主机: 下面是用于工作的命令: 现在我看到下面的错误消息: 我的配置有什么问题?我应该在哪里检查和纠正它? 非常感谢。

  • 自从我使用这些论坛很久以来,我在下图中得到了一个电子表格的模型。我需要使用match来检查两个特性。第三列只是一个ID,因此如果输出有效,我可以检查它是否正确。 实际日期是手动输入的名称和数字。当我使用带有两个条件的match时,它会返回#N/A。我甚至用AND()函数检查了每一行,以检查是否有一个真值,它在应该返回真值时确实返回真值。我需要的是数据的位置,而不是数据本身,因为它会在以后的各种间接

  • 问题内容: 我目前正在构建一个库以对我的一些代码进行模块化,并且我遇到了Hibernate的问题。 在我的主应用程序中,我有一个hibernate配置来获取运行所需的信息,但是我的库中也需要hibernate,因为我想要的某些对象可以在其他应用程序中使用。 当我启动两个hibernate设置的tomcat服务器时,出现错误,指出无法解析bean,并且说我的查询中缺少位置参数的bean。但是,当我仅

  • 问题内容: 我正在使用Spring和Hibernate,Spring的配置如下。如何配置两个数据源,会话工厂。使用注释管理事务。请指教 问题答案: 在Hibernate DAO中,我们可以使用@Qualifier注释,如下所示连接2个会话工厂