如果我们从配置中保护REST API,是否有必要在spring中使用方法级安全性

时间:2016-07-28 08:16:04

标签: java spring spring-security

我想问一下是否有必要保护我在带有Pre和Post注释的REST控制器中调用的方法。我通过java配置配置了一个安全性,如下所示:

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

    (...)

    .and()
        .authorizeRequests()
        .antMatchers("/api/**").hasAuthority("ROLE_USER");
}

因此/ api下的每个请求都应该使用ROLE_USER授权。我试图在互联网上找到一些关于此的信息,但我唯一能找到的是: https://coderanch.com/t/549265/Spring/method-security-spring-security

但是,我真的无法想到黑客会以某种方式访问​​服务层中的方法的用例。

4 个答案:

答案 0 :(得分:1)

服务层中的URL安全性和方法安全性针对不同的用例。

如果您只需控制只有具有特定角色的用户可以使用给定前缀(此处为API)调用URL,则您需要完全停止URL安全性。

如果您有一个复杂的应用程序,可以从不同的控制器调用某些服务方法,并且您希望确保不会限制访问,那么方法安全性可以通过确保只有有效用户可以确定商业行为。

如果您有一个复杂的安全模型,例如,每个人都有一个管理员,他们对自己的员工数据具有读取和/或写入权限,那么直接使用业务模型对象的服务层上的方法安全性就是最佳选择。

BTW,在控制器中使用方法安全性,或者更糟糕的是在静止控制器上使用通常是设计气味:如果你可以在控制器内部进行,通常最好使用URL安全性。如果它似乎有意义,你可能已经将业务逻辑导入Fat Ugly Controller。当控制器通常不实现接口时,不谈论使用默认JDK代理使用Spring AOP实现的方法安全性。

答案 1 :(得分:0)

除了可以使用某些功能外,使用这两种技术还可以提供额外的安全保护。

答案 2 :(得分:0)

方法级别安全性用于授权用户。 Spring允许访问之前执行两个基本操作。

  1. 验证(谁是用户)
  2. 授权(用户有哪些权限)
  3. 因此,例如,如果用户具有ROLE_USER权限,稍后在架构中,您决定将权限分配给某些角色。

    例如,让我们考虑一个角色' ROLE_USER' 以及权利已分配给用户

    • CAN_VIEW_DATA
    • CAN_ADD_SUB_USERS 等等。

    所以当一些用户拥有CAN_ADD_SUB_USERS的权利而某些用户没有权利时,方法级别的安全性就派上用场了。

    当然,你必须使用弹簧配置来获得权利和权威。但是一旦配置,它就提供了应用程序可能需要的额外安全级别。

    有关详细信息http://www.baeldung.com/role-and-privilege-for-spring-security-registration

    ,请参阅此链接

答案 3 :(得分:0)

REST无国籍。您应该在每次请求时发送访问令牌(like Google API)等内容:

https://{server}/api/customers?access_token=BGhznFGDS

您也可以通过Header-Attribute发送此信息。验证层(Filter)决定是否可以调用控制器方法。

我更愿意实现自己的Filters以获得100%的控制权。