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

无法理解Spring security的行为

师野
2023-03-14

我使用的是spring boot 2.1.4,它依赖于执行器。我想为执行器和我的应用程序配置单独的身份验证和授权机制。我阅读了多个HttpSecurity,并将我的WebSecurityAdapter配置如下:

@Configuration
public class ProvisioningServiceSecurityConfiguration {

  @Value("${actuator.user.name}")
  private String actuatorUserName;

  @Value("${actuator.password}")
  private String actuatorPassword;

  @Value("${actuator.role}")
  private String actuatorRole;

  @Bean
  public UserDetailsService userDetailsService() throws Exception {
    // ensure the passwords are encoded properly
    UserBuilder users = User.withDefaultPasswordEncoder();
    InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
    manager.createUser(users.username("user").password("password").roles("ADMIN").build());
    manager.createUser(
        users.username(actuatorUserName).password(actuatorPassword).roles(actuatorRole).build());
    return manager;
  }

  @Configuration
  @Order(1)
  public static class ApiWebSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {

    protected void configure(HttpSecurity http) throws Exception {
      http
          .antMatcher("/locations/**")
          .antMatcher("/organizations/**")
          .antMatcher("/productTypes/**")
          .authorizeRequests()
          .anyRequest().hasRole("ADMIN")
          .and()
          .httpBasic();
    }
  }

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

    protected void configure(HttpSecurity http) throws Exception {
      http
          .antMatcher("/manage/**")
          .authorizeRequests()
          .anyRequest().hasRole("ACTUATOR_ADMIN")
          .and()
          .httpBasic();
    }
  }

  /*@Configuration
  public static class FormLoginWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {

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

}

注意:我暂时禁用了表单登录

当我运行卷曲请求时

curl -XGET  http://localhost:9797/provisioningService/organizations/all

我能看到输出。似乎Spring的安全感从未存在过。当我启用表单登录时,我会看到spring登录屏幕。我观察到的另一个行为是,如果我将/位置的用户名和密码与执行器用户名和密码交换,我仍然会得到有效的响应。

我知道表单登录更像是一种退路,但我想禁用表单登录(可能我们会转移到cas),并仅基于spring security httpBasic使用身份验证和授权。我无法理解我所犯的错误。

最后,我的要求是:

1)只有当用户名密码为用户和密码时,才能访问对 /organizations或 /locations等的请求

2) 只有当用户名、密码和角色与致动器用户名和密码匹配时,才能访问致动器api请求/管理。

3) 任何其他API都可以通过Tall/form登录

我该如何实现这一目标?

共有1个答案

姜良哲
2023-03-14

1) Spring Security有一个功能,可以通过权限过滤(认证后)来控制访问,但没有功能可以根据登录所需的信息进行过滤。您需要业务逻辑来验证您在登录期间是否试图使用相应的ID和密码登录。

2) 如上所述,不提供ID和密码的访问控制。我建议只为您请求的两个帐户创建权限。

3) 。蚂蚁匹配器(“/form”)。permitAll()

 类似资料:
  • 如果未调用super.paint组件父方法,则JPanel.set后台方法不执行任何操作(尽管属性是)。 我在这里阅读了很多关于这个问题的类似问题,在每一个问题中,我都只找到了没有解释的解决方案,这有助于我理解为什么在将JPanel添加到JFrame之前编写方法时会改变JPanel的背景色,而当在

  • 我是Python初学者。我对Python中的正则表达式有所了解。例如:\d指的是匹配0个或更多的数字。 上面的表达式-第3行-在做什么?更具体地说,写有什么意义?

  • 问题内容: 对于没有JS经验的人,您对学习Node.js有什么建议? 我在论坛上阅读了很多有关事件驱动,非阻塞,异步,回调等内容的信息,但我不知道那是什么! 在哪里可以学习基础知识,以便理解所有术语以及将来的node.js? 谢谢! 问题答案: 您提到的概念(事件驱动,非阻塞,异步,回调)不是特定于JavaScript的,在更一般的上下文中理解它们非常有价值。它们都围绕着优雅地处理我们无法控制的资

  • 问题内容: 我的教授指示我在页面上进行自我介绍,就好像我是一个对象一样,我必须解决三件事: 1)对象状态,2)行为和3)身份。 但是,我仍然很困惑如何去做这样的事情。(我已经阅读了必须解决的三个属性,但是我不知道如何将其应用于一个人)。 例如,有人告诉我狗的状态,名称和颜色等。以及行为,例如走路,吠叫或摇尾巴。 所以我会做类似的事情: 还是我在这里得到一个完全错误的想法? 问题答案: 对象的特征是

  • 问题:给定一个整数数组,返回两个数字的索引,使它们相加到一个特定的目标。 您可以假设每个输入都有一个精确的解决方案,并且您可以不使用相同的元素两次。 例子: 给定nums=[2,7,11,15],target=9, 因为Nums[0]Nums[1]=2 7=9,返回[0,1]。 使用for循环后,我无法理解这些步骤。我是Python新手,请有人帮助我。

  • 每次我运行< code>pip时,都会出现以下警告。 警告:旧脚本包装程序正在调用pip。这将在未来版本的pip中失败。请看https://github.com/pypa/pip/issues/5599寻求解决潜在问题的建议。为了避免这个问题,您可以使用“-m pip”调用Python,而不是直接运行pip。 请帮我理解一下。Pip警告 编辑1。我尝试重新安装pip,但警告仍然存在。此外,我还附上