【问题标题】:Spring MVC, Spring Security, Database Controlled Page AccessSpring MVC、Spring Security、数据库控制的页面访问
【发布时间】:2011-08-18 00:11:09
【问题描述】:

我正在使用 Spring MVC 3.0.5 和 Spring Security 3.1.0RC2。我已经在我的站点中获得了 Active Directory 身份验证,基本的<security:intercept-url /> XML 可以过滤谁可以访问什么页面。我现在要做的是添加一些东西,这样我就想检查数据库,而不是查看访问页面的人的 XML。我正在建设的站点应该是让管理员更改哪些组可以访问哪些页面,所以我需要通过数据库来完成。任何指导将不胜感激。

【问题讨论】:

    标签: java spring spring-mvc spring-security


    【解决方案1】:

    您可以实现一个自定义PermissionEvaluator 来查询您的数据库。然后在控制器方法上使用 @PreAuthorize 注释,将“页面名称”传递给自定义 PermissionEvaluator,以便它可以在数据库查询中使用它。

    【讨论】:

      【解决方案2】:

      保护页面非常容易 - 让 Spring Security 为您完成。在您的控制器中,只需注释即可。要么:

      @Secured("ROLE_SOME_ROLE")
      @Controller
      public class MySecuredController {
          @RequestMapping("/foo")
          public String myHander() {
             ...
          }
      }
      

      @Controller
      public class MyController {
          @Secured("ROLE_SOME_ROLE")
          @RequestMapping("/foo")
          public String mySecuredHander() {
             ...
          }
      }
      

      【讨论】:

      • 但是我如何动态地做到这一点?我希望管理员能够通过网站更改这些设置,大概是通过数据库。
      • 嗯,不确定你能做到这一点。此外,在应用程序运行时更改对给定资源的访问定义似乎不是最佳实践。通常在运行时您更改谁有权访问,而不是定义访问权限的内容。什么是商业案例?
      • 那么您可能想放弃@Secured 并实现您自己的自定义AccessDecisionManager。然后你覆盖了内在的功能,可以做任何你想做的事情。
      【解决方案3】:

      您可以在配置中使用数据库来控制它

       <authentication-manager>
          <authentication-provider>
            <jdbc-user-service data-source-ref="dbDataSource"/>
          </authentication-provider>
        </authentication-manager>
      

      其中 db 数据源是数据库的数据源 bean

      只要数据库有身份验证表,spring 会默认选择这些表,但您也可以配置其他选项。 即用户权限我假设你已经在使用

      【讨论】:

      • 我有一个将从数据库中读取的数据访问对象 bean。那不是问题。对于给定的页面访问请求,我该如何说“是”或“否”?
      • 您可以在页面上设置访问权限以对应用户角色 -
      • 另外你的问题说我现在想做的是添加一些东西,这样我就不想查看访问页面的人的 XML,我想检查数据库,这是我首先回答的,你没有说明您在问题中设置了数据源,请更具体
      • 这根本不是我想要的。我不想摆脱 AD 身份验证。我想对 AD 进行身份验证,获取用户分配的组,然后使用它们检查对 DB 表的页面访问。您提供的 XML 是 AD 身份验证部分的替代品,与编程访问检查没有任何关系。
      • 如果您使用身份验证管理器,Spring 应该会自动为您提供此功能,它会查询您已经设置的数据库并检索用户及其角色,并根据他们的角色允许访问有。
      猜你喜欢
      • 2016-12-20
      • 2017-11-04
      • 1970-01-01
      • 2014-10-15
      • 1970-01-01
      • 2013-11-25
      • 2014-01-19
      • 2013-07-17
      • 1970-01-01
      相关资源
      最近更新 更多