Вот пример, который работает с Java Play 2.1.1 и Heroku.
public class ForceHttps extends Action<Controller> {
// heroku header
private static final String SSL_HEADER = "x-forwarded-proto";
@Override
public Result call(Context ctx) throws Throwable {
final Result result;
if (Play.isProd() && !isHttpsRequest(ctx.request())) {
result = redirect("https://" + ctx.request().host()
+ ctx.request().uri());
}
else {
// let request proceed
result = this.delegate.call(ctx);
}
return result;
}
private static boolean isHttpsRequest(Request request) {
// heroku passes header on
return request.getHeader(SSL_HEADER) != null
&& request.getHeader(SSL_HEADER)
.contains("https");
}
}
Затем к любым контроллерам, которые вы хотите проверить на https, добавьте @With (ForceHttps.class). Или, если вы хотите, чтобы все контроллеры проверяли, добавьте класс HttpsController, расширяющий Controller, и пусть все ваши классы расширяют HttpsController.
, например
@With(ForceHttps.class)
public class HttpsController extends Controller {
}