代码之家  ›  专栏  ›  技术社区  ›  slartidan

如何默认拒绝访问所有URL?

  •  12
  • slartidan  · 技术社区  · 6 年前

    在定义新的spring boot rest资源时,我往往忘记为它们的url模式创建一个spring安全配置。

    默认情况下,我如何拒绝访问所有url,并且只允许访问显式配置的url模式?(我正在使用 .hasRole 为了允许访问),我希望尽可能避免意外的安全漏洞。

    假设我有三个休息资源: /jobs ,请 /desks /salary 是的。我当前的代码可能如下所示:

    http.authorizeRequests()
    
        .antMatchers(HttpMethod.GET, "/jobs")
        .hasRole("my_user")
    
        .antMatchers(HttpMethod.GET, "/desks")
        .hasRole("my_user");
    

    但目前,访问url /工资 提供给所有人(因为尚未配置)!

    3 回复  |  直到 6 年前
        1
  •  11
  •   max    6 年前

    默认情况下,您可以使用以下命令拒绝所有请求: .anyRequest().denyAll() 显式地允许 .hasRole

        2
  •  10
  •   achAmháin    6 年前

    春天的 Expression-Based Access Control 有一个 denyAll 表达式的计算结果始终为 false 是的。

    所以你能做的就是用这个 忠诚的 方法拒绝访问所有内容,然后可能允许通过 hasRole 以下内容:

    http.authorizeRequests().antMatchers("/admin/**").access("hasRole('ADMIN')").antMatchers("/**").denyAll();
    

    例如,这将允许具有管理员权限的用户访问以 /admin 是的。然后它将拒绝访问所有其他页面。注意顺序很重要 .antMatchers("/**").denyAll() 第一 ,它会否认 全部的 访问并忽略表达式的其余部分。

    或者,你可以使用 permitAll() 对于特定的url模式:

    http.authorizeRequests().antMatchers("/users/**").permitAll().antMatchers("/**").denyAll();
    

    只需注意,您可能还需要允许访问某些登录方式,以便系统允许某人使用特定角色登录,以便将其组合在一起,并允许所有人尝试登录,只有管理员用户可以访问管理页并拒绝所有其他人,然后类似于:

    http.authorizeRequests().antMatchers("/login").permitAll().antMatchers("/admin/**").access("hasRole('ADMIN')").antMatchers("/**").denyAll();
    
        3
  •  0
  •   MBaev    6 年前

    anyRequest().denyAll() 默认情况下拒绝所有请求 .hasRole 显式允许请求