After a fruitful weekend of coding (and DIY, but that’s not relevant to this), Deadbolt 2.3.2 has been released. The major change is that it’s available via Maven Central, so there’s no need to add a resolver for it.
This line can be removed from your build.sbt – don’t let the door hit its ass on the way out:
resolvers += Resolver.url("Objectify Play Repository", url("http://deadbolt.ws/releases/"))(Resolver.ivyStylePatterns)
NB Older versions of Deadbolt are not yet in Maven, so you’ll still need the resolver for versions < 2.3.2. I’ll be publishing them to Maven as and when time allows.
I used the following guides to prepare all three Deadbolt libraries (deadbolt-core, -java and -scala) to Sonatype:
Deploying to Sonatype :: http://www.scala-sbt.org/0.13/docs/Using-Sonatype.html
Publishing Scala libraries to Sonatype :: http://www.loftinspace.com.au/blog/publishing-scala-libraries-to-sonatype.html
DeadboltHandler#getSubject
The other change relates to DeadboltHandler#getSubject
. Until now, this has been a synchronous call that returns the Subject itself. As of 2.3.2, it now returns something a bit nicer for a reactive architecture.
Scala
The signature of the DeadboltHandler trait has changed from def getSubject[A](request: Request[A]): Option[Subject]
and is now def getSubject[A](request: Request[A]): Future[Option[Subject]]
. It’s a simple procedure to update your code. In place of
override def getSubject[A](request: Request[A]): Option[Subject] = { Some(however you retrieve your user) }
you can replace it with
override def getSubject[A](request: Request[A]): Future[Option[Subject]] = { Future(Some(however you retrieve your user)) }
Java
The signature of the DeadboltHandler interface has changed from Subject getSubject(Http.Context context)
and is now F.Promise
.
Existing code which looks something like
public Subject getSubject(Http.Context context) { return AuthorisedUser.findByUserName("steve"); }
would now look like
public F.PromisegetSubject(Http.Context context) { return F.Promise.promise(new F.Function0 () { @Override public Subject apply() throws Throwable { return AuthorisedUser.findByUserName("steve"); } }); }
All the code is available in GitHub.
If you have any questions or issues, please let me know.
Keep Playing!