【问题标题】:Restricting access to some page based on permission根据权限限制对某些页面的访问
【发布时间】:2015-07-31 02:46:40
【问题描述】:

我是学生,对我们的发展不熟悉。我在使用 Spring MVC 开发 Web 应用程序时遇到了一个奇怪的问题。

我有一些来自数据库的权限。如果我授予用户 - "userOne""createRole" 权限,则登录后 "userOne" 可以在其仪表板上看到一个链接- “创建角色”。如果用户单击“创建角色” 链接,则服务器将重定向到此 url - /secure/roleManagement/createNewRole.html

请注意,如果撤消 "createRole" 权限,则用户将无法看到 "Create Role" 链接。但即使在此之后,如果我在浏览器中输入 url - /secure/roleManagement/createNewRole.html 那么我可以访问创建角色页面,该页面不应该出现在用户面前。

那么我该如何隐藏它。我知道提供的信息不足以回答,但请给出一些想法。我被这个困住了。听说在这种情况下我可能会使用spring授权来拦截url请求。但出于学习目的,我们不想使用它。有什么想法吗?

谢谢

【问题讨论】:

  • 你有控制器处理对/secure/roleManagement/createNewRole.html的请求吗?
  • 是的,url是从控制器返回的。
  • 所以也许您可以在控制器中编写一个简单的例程来验证请求此 url 的用户是否具有所需的角色?
  • @Thiago Porciúncula,感谢您的建议。但是有没有其他方法,因为我们必须对很多地方进行更改。

标签: java spring jsp authorization


【解决方案1】:

我认为解决此问题的最佳方法是使用 Spring Security 命名空间并添加如下拦截规则:

<intercept-url pattern="/secure/roleManagement/createNewRole" 
               access="hasRole(createRole)" 
/>

但由于您不希望这样,替代方案是:

  1. 假设有一个控制器处理对/secure/roleManagement/createNewRole.html 的请求,您可以在开头添加一个验证,检查用户是否具有所需的角色。
  2. 在一个(或多个)过滤器中创建您的安全逻辑。您可以有一个过滤器来拦截这个特定的 URL,然后为其他 URL 创建其他 URL(这可能不是一个好主意,具体取决于您需要处理的 URL 的数量),或者您可以有一个安全过滤器来处理它们.

替代方案基本上是实现 Spring Security 开箱即用的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-26
    • 2014-06-03
    • 2015-12-02
    • 2018-06-06
    • 2011-04-27
    • 2021-05-17
    • 2023-04-09
    相关资源
    最近更新 更多