【发布时间】:2015-04-02 10:32:11
【问题描述】:
在我的网络应用中,用户可以更改他们的用户详细信息。此页面的 URL 是:
springproject/usermanagement/edituserinfo/4
其中“4”是用户 ID。
我的安全上下文如下所示:
<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>
如何限制用户只能访问他们自己的“edituserinfo”页面?例如。用户 ID 为 1 的用户只能访问:“springproject/usermanagement/edituserinfo/1”而不是“springproject/usermanagement/edituserinfo/4”
【问题讨论】:
-
你真的需要在 URL 中传递用户 ID 吗?理想情况下,您的 URL 应该只是
springproject/usermanagement/edituserinfo。您应该将 Java 代码中的用户 ID 检索为SecurityContextHolder.getContext().getAuthentication().getPrincipal()并使用它来加载用户详细信息。这将确保用户只能查看和编辑自己的详细信息,而不能查看和编辑其他人的详细信息。
标签: spring-mvc spring-security