我想问一下是否有必要保护我在带有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
但是,我真的无法想到黑客会以某种方式访问服务层中的方法的用例。
答案 0 :(得分:1)
服务层中的URL安全性和方法安全性针对不同的用例。
如果您只需控制只有具有特定角色的用户可以使用给定前缀(此处为API)调用URL,则您需要完全停止URL安全性。
如果您有一个复杂的应用程序,可以从不同的控制器调用某些服务方法,并且您希望确保不会限制访问,那么方法安全性可以通过确保只有有效用户可以确定商业行为。
如果您有一个复杂的安全模型,例如,每个人都有一个管理员,他们对自己的员工数据具有读取和/或写入权限,那么直接使用业务模型对象的服务层上的方法安全性就是最佳选择。
BTW,在控制器中使用方法安全性,或者更糟糕的是在静止控制器上使用通常是设计气味:如果你可以在控制器内部进行,通常最好使用URL安全性。如果它似乎有意义,你可能已经将业务逻辑导入Fat Ugly Controller。当控制器通常不实现接口时,不谈论使用默认JDK代理使用Spring AOP实现的方法安全性。答案 1 :(得分:0)
除了可以使用某些功能外,使用这两种技术还可以提供额外的安全保护。
答案 2 :(得分:0)
方法级别安全性用于授权用户。 Spring允许访问之前执行两个基本操作。
因此,例如,如果用户具有ROLE_USER权限,稍后在架构中,您决定将权限分配给某些角色。
例如,让我们考虑一个角色' ROLE_USER' 以及权利已分配给用户所以当一些用户拥有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%的控制权。