2011-11-30 55 views
4

我已经尝试过关于安全模块的Play教程! 1.2.3。 认证机制非常简单直接。播放框架 - 自定义身份验证

我有一个问题。如果我想实现自定义身份验证,是否可以自定义安全模块,或者我必须从头开始编写代码?

例如,我想通过请求头参数进行身份验证,我该怎么办?

回答

1

安全模块是微小的:你可以从这个模块得到所有的代码,把它放在你的应用程序,如果你想使您可以编写一个插件一个更大的东西定制你想要的

1

。你可以在我的permsec-module看到一个例子,不幸的是这个例子还在建设中,但应该包含你需要的一切。请参见PsecPlugin

1

您可以使用@Before批注在控制器中进行基本身份验证。然后在请求方法中检查是否设置了帐户参数。

@Before 
static void checkAuth() {  
    // Get auth header 
    Header auth = request.headers.get("authorization"); 
    if (auth == null) return; 

    // Get basic auth value 
    String authValue = auth.value(); 
    if (authValue == null) return; 

    // Split header components 
    String[] authComp = authValue.split(" "); 
    if (authComp.length != 2) return; 

    // Decode base64 auth string 
    String basic = new String(Codec.decodeBASE64(authComp[1])); 
    String[] userPass = basic.split(":"); 
    if (userPass.length != 2) return; 

    // Try to fetch account 
    String email = userPass[0]; 
    String pass = userPass[1]; 
    String passSHA1 = Codec.hexSHA1(pass); 

    List<models.Account> accounts = models.Account.find("email password", email,  passSHA1).asList(); 
    if (accounts.size() != 1) return; 

    // Set account on request 
    request.args.put("_authenticatedUser", accounts.get(0)); 
}