【问题标题】:play framework secure module performance发挥框架安全模块性能
【发布时间】:2013-04-24 16:25:17
【问题描述】:

我正在使用播放框架版本 1.2.5 我将安全模型添加到我的应用程序中。 验证我的视图是否根据用户权限隐藏一些 html 菜单。 我还将验证用户登录等(我目前关于视图的问题) 我像这样在 Security 类中使​​用了 check 方法

static boolean check(String profile) {
    LicenseType license = LicenseType.valueOf(profile);
    User user = User.find("byEmail", connected()).first();
    return user.hadLicense(license);
} 

例如,在我的模板中我会这样做

<html><body>
        #{secure.check "ADMIN"}
             <a href="link-to-admin-page" >
        #{/secure.check}
        .... some html 
        #{secure.check "EDIT"}
              <div>some html here </div>
        #{/secure.check}
        .... some html 
        #{secure.check "ADD"}
              <div>some html here </div>
        #{/secure.check}

</body></html>

我的问题是这样的。 这种情况意味着,像这样的单个视图将访问数据库 4 次 用于通过电子邮件选择用户。 只是为了检查安全?

谢谢。

【问题讨论】:

  • 你能帮我理解一下吗?

标签: database performance security playframework playframework-1.x


【解决方案1】:

是的,这确实意味着每次检查都会访问数据库(尽管 JPA 可能会给您一个缓存条目 - 不确定那里)。

为避免这种情况,您可以在中缓存每个请求的结果

请求.args

【讨论】:

  • 使用@before 方法将用户许可证放在renderArgs 中,然后通过Security.check 进行检查会是更快的解决方案吗?
  • 现在我正在使用缓存(playframework memCache)来存储用户许可证,你认为这是一个好习惯吗?
【解决方案2】:

从您提供的代码示例中,用户似乎已经登录。所以我建议您将用户许可证变量存储在会话中,然后使用静态方法进行比较。您同样可以将许可证存储在缓存中(memcache)

例如

static boolean check(String profile){   
        LicenseType license = LicenseType.valueOf(profile);       
        return User.hadLicense(license, connectedLicense());  
   }

注意:connectedLicense() - 是登录时用户存储的许可证。

【讨论】:

    猜你喜欢
    • 2010-09-26
    • 2011-01-29
    • 2010-11-25
    • 2017-11-21
    • 2012-10-14
    • 2013-05-22
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    相关资源
    最近更新 更多