用户的网址安全性

时间:2016-06-22 01:38:12

标签: spring spring-security

对于像

这样的网址
http.authorizeRequests().antMatchers("/rest/users/**").hasRole("USER");

如何确保已连接的用户只能修改其密码,而不能修改其他用户...

实际上,我对网址有保护......但这还不足以阻止这种情况

{{1}}

3 个答案:

答案 0 :(得分:1)

假设你有一个带有用户名作为参数之一的公共方法的Spring bean(它可以在控制器,安全层,服务层或DAO中),你可以添加@PreAuthorize注释:

@PreAuthorize("#username == authentication.name")
public void updateUserPassword(String username, String newPassword);

如果尚未在安全配置中启用注释前和注释,则必须启用注释。

答案 1 :(得分:0)

Principal对象(如here)添加到方法的参数列表中,以确认经过身份验证的用户与API URL中的userId是同一用户(执行任何背景DAO查询都需要userId和经过身份验证的用户之间的映射)。如果不是,则返回403或404,否则更新密码。无论您是返回403还是404,最好保持一致并为未经授权和用户未找到的情况返回相同的数字,以便不向黑客提供不需要的信息。

答案 2 :(得分:0)

我认为您对/ rest / users / **进行了身份验证。您可以使用以下代码获取当前用户

YourUserPrincipalDto dto = (YourUserPrincipalDto) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
Long userId = dto.getUserId();

YourUserPrincipalDto应实现 UserDetails