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

Spring Security:如果未指定@PreAuthorize,如何默认拒绝请求

谯嘉胜
2023-03-14

我有一个简单的Spring Boot应用程序,它公开了一个RESTAPI。我已经使用@PreAuthorize(“hasRole('ROLE_4'))注释成功地配置了Spring Security性,以根据restapi中的角色保护每个方法。

我注意到,如果我根本不把@PreAuthorize注释,框架允许任何经过身份验证的用户进行此请求。我想扭转这种行为。因此,如果其中一个程序员忘记添加@PreAuthorize注释,对该方法的任何请求都将被自动拒绝。

以下是我的配置:

@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {

    //Disable HTTP Basic authentication
    http.httpBasic().disable();

    //Add the filters
    http.addFilterBefore(new AuthenticationFilter(authenticationManager()), BasicAuthenticationFilter.class);
}

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.authenticationProvider(securityServiceAuthenticationProvider());
}


@Bean
public AuthenticationProvider securityServiceAuthenticationProvider() {
    return new SecurityServiceAuthenticationProvider();
}

}

谢谢Guy Hudara

共有2个答案

龙承颜
2023-03-14

您可以指定一个自定义AccessDecisionManager,如果查询的对象是方法调用,则检查它是否有@PreAuthorize注释;如果是,就让它过去。否则,失败。您可以像这样将其添加到配置:http。授权请求()。accessDecisionManager(myManager)

严升
2023-03-14

您可以使用MethodSecurityInterceptor;这里是XML配置示例。该示例将安全性应用于单个bean,但表达式非常灵活,您可以保护任何名称以“Controller”结尾的类的所有公共成员。我以前使用过类似的XML配置,但我没有使用Java配置;但是我想您可以在Java配置中做同样的事情。

 类似资料:
  • 我试图覆盖Archaius为线程池提供的默认配置(如corepool大小、最大池大小、队列大小等)。但不知何故,它并没有起到作用。下面是我在application.yml文件中的配置。 Hystrix:命令:QueryTimeOutHandler:执行:隔离:线程:TimeOutInMilliseconds:600000线程池:QueryTimeOutHandler:CoreSize:200 Ma

  • 我是jsPlumb的新手,我对演示很感兴趣。当指定目标或源时,我不需要允许连接。我的意思是:当目标是X-连接无法建立。

  • 问题内容: 考虑程序的三个不同的运行: 是否可以在第一种情况下,第二种情况下,第三种情况下使用? 问题答案: 带有参数的参数可以很好地处理此三向输入。 我也可以给它一个参数。 如何使用argparse在python中添加多个参数选项?

  • 我有简单的对象客户端

  • 像这样: 我该怎么办?

  • 我需要解决这个场景。我有两个amqp消费者设置来获取一条消息。 taskChannel是queuechannel,但一次只允许使用一条消息,因此没有并行处理。如果另一条消息花了太长时间才继续,我如何在超时后拒绝一条消息。那么这个消息将返回到队列,由另一个节点继续?我的意思是,这两个消费者预取了两条消息,但一次只能处理一条,所以如果第一条预取消息需要很长时间才能处理,那么如何释放第二条预取消息呢。