jor*_*gen 4 spring-mvc spring-security
在我的Web应用程序中,用户可以更改其用户详细信息。该页面的URL为:
springproject/usermanagement/edituserinfo/4
Run Code Online (Sandbox Code Playgroud)
其中“ 4”是用户标识。
我的安全上下文如下所示:
<security:http auto-config="true" use-expressions="true">
<security:intercept-url pattern="/usermanagement" access="isAuthenticated()" />
<security:intercept-url pattern="/usermanagement/new" access="hasRole('ROLE_ADMIN')" />
<security:intercept-url pattern="/usermanagement/edit/*" access="hasRole('ROLE_ADMIN')" />
<security:intercept-url pattern="/usermanagement/edituserinfo/*" access="isAuthenticated()" />
</security:http>
Run Code Online (Sandbox Code Playgroud)
如何限制用户仅访问他们自己的“ edituserinfo”页面?例如,具有用户ID 1的用户只能访问:“ springproject / usermanagement / edituserinfo / 1”,而不能访问“ springproject / usermanagement / edituserinfo / 4”
小智 8
您也可以使用支持表达式的Spring Security的@PreAuthorize来完成此操作:
@PreAuthorize("#userId == principal.id")
public void doSomething(@PathVariable String userId);
Run Code Online (Sandbox Code Playgroud)
请参阅Spring文档:
使用@PreAuthorize和@PostAuthorize的访问控制
PathVariable在URL上使用,就像@RequestMapping("/usermanagement/edituserinfo/{userid}")和在代码中那样,SecurityContextHolder.getContext().getAuthentication().getPrincipal()针对useridpath变量验证登录用户的Spring Security上下文原理(通过)。如果不匹配,请跳出该用户,登录SecurityException,然后向管理员发送电子邮件。
| 归档时间: |
|
| 查看次数: |
4433 次 |
| 最近记录: |