安全网址给用户
的URL像安全网址给用户
@RequestMapping(value = "https://*.com/users/{userId}/update/password", method = RequestMethod.PUT)
如何确保连接的用户只能修改其密码,而不是其他用户的一个...
其实,我有对URL保护...但它不足以防止这种情况下
http.authorizeRequests().antMatchers("/rest/users/**").hasRole("USER");
我soppuse你有一个/ rest/users/**认证。您可以通过以下代码获取当前用户。
YourUserPrincipalDto dto = (YourUserPrincipalDto) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
Long userId = dto.getUserId();
YourUserPrincipalDto应该实现的UserDetails。
好,所以没有办法在这种命令中检查这种类型:http.authorizeRequests()。antMatchers(“/ rest/users /**").hasRole("USER“); –
假设你有一个Spring bean与用户名的公共方法作为一个参数(它可以在控制器,安全层,服务层o [R DAO),您可以添加注释@PreAuthorize
:
@PreAuthorize("#username == authentication.name")
public void updateUserPassword(String username, String newPassword);
如果没有这样做,您必须在您的安全配置使前,后的注释。
我也会这样,但在服务层。它真的不应该在DAO上。 –
无论如何,upvoted至少你是使用AOP模式,而不是在不应该处理它的类中编码安全性。 –
为什么不在控制器上? –
如果你分享更多的代码,你可能会得到更确切的答案。 – holmis83
没有代码,我在做之前先问一个问题。 –
检查连接用户的ID是否与URL中的用户ID相同。 –