播放框架 - 自定义验证

时间:2011-11-30 10:10:45

标签: playframework

我已经尝试了关于Play的安全模块的教程! 1.2.3。 身份验证机制非常简单明了。

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

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

3 个答案:

答案 0 :(得分:1)

安全模块很小:您可以从该模块获取所有代码,将其放入您的应用程序并根据需要进行自定义

答案 1 :(得分:1)

如果你想做一件更大的事情,你可以写一个插件。你可以在我的permsec-module看到一个例子,遗憾的是仍在建设中,但应该包含你需要的一切。请特地查看PsecPlugin

答案 2 :(得分: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));
}