玩框架安全模块性能

时间:2013-04-24 16:25:18

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

我正在使用Play框架版本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次 用于通过电子邮件选择用户。 只是为了检查安全性?

谢谢你。

2 个答案:

答案 0 :(得分:1)

是的,它确实意味着每次检查都会访问数据库(虽然JPA可能会为您提供缓存条目 - 不确定是否存在)。

为避免这种情况,您可以在

中基于每个请求缓存结果

request.args中

答案 1 :(得分:0)

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

E.g。

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

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

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